
function notImplemented(boxName, funcName) {
    alert(boxName + "." + funcName + " not implemented");
}

/*
DEALER OBJECT v_2.0
*/

// kaut kas taps, bet veel nezinu kas
function Dealer() {
    this.objectCount = 0;
    this.objects = new Array();
}

// sho f-ju izsauc no projekta pirmaa dokumenta
Dealer.prototype.projectStart = function() {
    if (!this.documentObject) {
        this.documentObject = document.body;
        this.documentObject.style.background = "red";
    }

    // izsauc iebuuveeto onload funkciju
    this.onload();
}

// izparsee sanjemto pacinju
Dealer.prototype.handler = function( pack ) {
    var target = pack.target;
    var objData = pack.data;
    
    obj = document.getElementById(target);
    if (obj) {
	obj.innerHTML = objData;
    }
}

// nodefineejam objektu dealeri
var dealer = new Dealer();



/*
NARIX(v_0.20) request reader
*/

/* namespacing object */
var net = new Object();

net.READY_STATE_UNINITIALIZED=0;
net.READY_STATE_LOADING=1;
net.READY_STATE_LOADED=2;
net.READY_STATE_INTERACTIVE=3;
net.READY_STATE_COMPLETE=4;

// iesleedzam debugoshanu
net.DEBUG = 0;

/*--- content loader object for cross-browser requests ---*/
net.hospital = function() {
    this.req = null;
}

// ideja - skataas metadatos. tur ir n,P1,P2,...,Pn , kur
// n ir repleisoto charakteru skaits, Pi - poziicija itajam
// repleisotajam charam. poziicija ir aizkodeetajaa stringaa,
// saakot no nulles.
// taadeejaadi var aatri atrast visus repleisotos charus un
// aizvietot tos ar saakotneejaam veertiibaam
// rezultaataa atgriezh veiksmiigi dekodeeto charu skaitu

net.hospital.prototype.narixDecode = function(s, meta) {
    // f-ja, kuru izmanto spirtons
    function chr(code) {
       return String.fromCharCode(code);
    }

    var pos = meta.split(",");
    if (pos < 1) return s;

    var pcount = pos[0]; // poziiciju skaits
    var lc = 0; // peedeejais komats
    var found = 0;
    for (var i = 0; i < pcount; i++) {
        // katra korekcija samazina stringu par 2 simboliem,
        // taapeec jaamaina mekleeshanas poziicija
        var p = parseInt(pos[i + 1], 16) - found * 2;
        if (isNaN(p)) return s;
        if (s.charAt(p) != "%") return s;
        var code = parseInt(s.substr(p + 1, 2), 16);
        if (isNaN(code)) return s;
        var c = "" + chr(code);
        s = s.substring(0, p) + c + s.substring(p + 3);
        found++;
    }
    return s;
}

// paarsee sanjemto mesaagi un apstraadaa attieciibaa no sanjemtaa interface
net.hospital.prototype.parseResponseData = function(message, rootObject) {
    // formaats => <nosaukums>:<tips>:<izmeers>:<codestring>=<dati>

    while (message.length>0) { // cikleejaas, kameer mesaage veel kaut ko satur
	var variable_index = message.indexOf(":");
	var variable = message.substring(0, variable_index); // izgriezjam <nosaukums>
	
        // Ja mesaagee iemaldiijies kaut kaads nestandarta simbols, tad neiecikleejamies
        if (!variable && message.length>0)
            break;

	var type_index = message.indexOf(":", variable_index+1);
	var type = parseInt(message.substring(variable_index+1, type_index)); // izgriezjam <tips>
	
	// dabonam izmeeru
	var size_index = message.indexOf(":", type_index+1);
	var size = parseInt(message.substring(type_index+1, size_index)); // izgriezjam <izmeers>

	// dabonam codestringu
	var codestring_index = message.indexOf("=", size_index+1);
	var codestring = message.substring(size_index+1, codestring_index); // izgriezjam <codestring>
	
	// dabonam mainiigaa veertiibu
	var value = message.substr(codestring_index+1, size); // izgriezjam <dati>

	if (type == 1 || !type) { // ja zaraa tiek liidz tipam - mainiigais(1) vai ir null
	    rootObject[ variable ] = this.narixDecode(value, codestring); // dekodeejam sanjemto stringu
	} else {
	    eval("rootObject[ variable ] = new Object();") // izveido jaunu nodi(koka zaru sadaliishanaas vietu)
	    this.parseResponseData(value, rootObject[ variable ]); // izsauc apakshfunkciju, kas parsee to datu apakshdatus
	}

	// nogriezjam apstraadaato dalju no mesaages
	message = message.substring(codestring_index+1+size, message.length);
    }
}

net.hospital.prototype.parseResponse = function() {
    // notiek kaut kaada paarseeshana
    var response = this.req.responseText;
    var protocol_name = "NARIX_v";
    // noskaidro, kur ir NARIX protokola saakums
    var protocol_name_loc = response.indexOf("NARIX_v");
//    alert(response);

    // ja neatrod vispaar mesaagee NARIX saakumu, tad visa mesaage ir errors
    if (protocol_name_loc<0) protocol_name_loc = response.length;

    var error = response.substring(0, protocol_name_loc);

    // iemetam error divaa iekshaa error mesaagi
    if (error) {
      if (net.DEBUG) {
         if (document.getElementById("errorwin")) {
            var obj = document.getElementById("errorwin");
            obj.setAttribute("style", "display: block;");
            obj.innerHTML += error+"<br/>";
         }
      }
      // nogriezj erroru un straadaa taalaak
      response = response.substring(response.indexOf("NARIX_v"), response.length);
    }

    while (response.length>0) { // cikleejaas, kameer mesaage veel kaut ko satur
	// noskaidro mesaages garumu un izgriezj mesaagi
	var version = response.substr(protocol_name.length, 4);
        
	var message_size = parseInt(response.substr(protocol_name.length + version.length, 16));
	var message = response.substr(protocol_name.length + version.length + 16, message_size);
	
	// padodam funkcijai parse vajdziigos mainiigos
	
	var pack = new Object();
        // objekts mainiigajam piemet klaat visus sanjemtos rezultaatus
	this.parseResponseData(message, pack);

        // debugoshanas fiicha
        if (net.DEBUG) {
           var obj = document.getElementById("errorwin");
           if (obj) {
              obj.setAttribute("style", "display: block;");
              dumpObjToDiv(pack, "errorwin", 123);
           }
        }

        // te izsaucas Dealer handleris
        dealer.handler( pack );

	// nogriezjam izpaarseeto dalju
	response = response.substring(protocol_name.length + version.length + 16 + message.length, response.length);
    }
}

net.hospital.prototype.loadXMLDoc = function(url, method, params) {
    // defaultaa metode=GET
    if (!method) {
	method="GET";
    }
    params = "requestData="+encodeBase64(params);

    var contentType = "";

    // ja nav noraadiits kontent-taips un ir POST metode, tad piedefineejam
    if (!contentType && method=="POST") {
	contentType = "application/x-www-form-urlencoded";
    }

    if (window.XMLHttpRequest) { // Moziilla utt
	this.req = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // SX
	this.req = new ActiveXObject("Microsoft.XMLHTTP");
    }

    if (this.req){
	try {
	    var loader = this;
	    this.req.onreadystatechange = function() {
		net.hospital.onReadyState.call(loader);
	    }
	    this.req.open(method,url,true);
	    if (contentType) {
		this.req.setRequestHeader("Content-Type", contentType);
	    }
	    this.req.send(params);
	} catch (err) {
	    this.defaultError.call(this);
	}
    }
}

// funkcija, kas izsaucaas, kad sanjem atbildi
net.hospital.onReadyState = function() {
    var req=this.req;
    var ready=req.readyState;
    if (ready==net.READY_STATE_COMPLETE) {
        var b = document.getElementById("loading_block");
        if (b) b.style.display = "none";
        this.parseResponse.call(this);
    }
}

net.hospital.prototype.defaultError = function() {
    alert("error fetching data!");
}

