function ajsetup(script)
{
	this.url = script;
	this.target = null;
	
	this.runFunAfter = null;
	this.argumentsFunAfter = new Array();

	this.pars = new Hash();
	
	this.__pars__ = "";

	this.debug = false;
	this.LOADER = false;
}

function debugMode(mode)
{
	this.debug = mode;
}

function loader(mode)
{
	this.LOADER = mode;
}

function sReq()
{
	var obj = this;

	if(this.LOADER)
		documentOverlay.show();

	new Ajax.Request
	(
		this.url, 
		{
			method: 'post',
			parameters: this.__pars__,
			onSuccess: function(transport){
							if(obj.LOADER)
								documentOverlay.hide();
								
								obj.reply(transport);
						},
			onFailure: function(transport){
							alert('Η αίτησή σας στο διακομιστή δεν έχει ολοκληρωθεί εντός του αποδεκτού χρονικού διαστήματος.\nΠατήστε ΟΚ για να επιστέψετε και δοκιμάστε ξανά. \n Πιθανά προβλήματα είναι η κατάσταση του δικτύου ή η υπερφόρτωση του διακομιστή.');
		
							if(obj.LOADER)
								documentOverlay.hide();
						},
			onException: function(transport){
							alert('Η αίτησή σας στο διακομιστή δεν έχει ολοκληρωθεί εντός του αποδεκτού χρονικού διαστήματος.\nΠατήστε ΟΚ για να επιστέψετε και δοκιμάστε ξανά. \n Πιθανά προβλήματα είναι η κατάσταση του δικτύου ή η υπερφόρτωση του διακομιστή.');
		
							if(obj.LOADER)
								documentOverlay.hide();
						}
		}
	);
}

function callAfter(funName)
{
	if(typeof(funName) == "string" && funName.length != 0)
		this.runFunAfter = funName;
	else
		this.error("FUN_NAME ERROR");
}

function errorHandling(str)
{
	if(this.debug)
		alert(str);
}

function setArguments()
{
	if(setArguments.arguments.length == 0)
		this.error('Zero length arguments');

	var start = this.argumentsFunAfter.length;
	for(i = start; i < setArguments.arguments.length+start; i++)
		this.argumentsFunAfter[i] = setArguments.arguments[i - start];
}

function callUserDefineFunction(replyXML)
{
	if(this.target !== null)
	{
		this.target.update(replyXML.responseText);
	}
	
	if(this.runFunAfter !== null)
	{
		var str = this.runFunAfter+"(";
		for(var i = 0; i < this.argumentsFunAfter.length; i++)
			str += "this.argumentsFunAfter["+i+"],";
		
		str += "replyXML)";

		eval(str);
	}
}

function setTargetElement(target)
{
	this.target = $(target);
}

function transportData(key, value)
{
	if(typeof(this.pars.get(key)) == "undefined")
	{
		this.pars.set(key, value);
		this.__pars__ = this.pars.toQueryString();
		//alert(this.__pars__);
	}
}

function alternate_txt(source)
{
	if(this.target == null)
		this.error("ΔΕΝ ΕΧΕΙ ΟΡΙΣΤΕΙ TO ΠΕΔΙΟ 'ΣΤΟΧΟΣ'.")
	else
		this.target.update(source);
}

function alternate_img(source)
{
	if(this.target == null)
		this.error("ΔΕΝ ΕΧΕΙ ΟΡΙΣΤΕΙ TO ΠΕΔΙΟ 'ΣΤΟΧΟΣ'.")
	else
		this.target.innerHTML = "<img src='"+source+"' \>";
}

ajsetup.prototype.run = sReq;
ajsetup.prototype.reply = callUserDefineFunction;
ajsetup.prototype.addData = transportData;
ajsetup.prototype.setTarget = setTargetElement;
ajsetup.prototype.debugMode = debugMode;
ajsetup.prototype.loader = loader;
ajsetup.prototype.callAfter = callAfter;
ajsetup.prototype.setArgs = setArguments;
ajsetup.prototype.error = errorHandling;
ajsetup.prototype.alternate_txt = alternate_txt;
ajsetup.prototype.alternate_img = alternate_img;

function getArg(index)
{
	return getArg.caller.arguments.length >= index ? getArg.caller.arguments[index] : null;
}

var documentOverlay = {
    show: function() 
	{
        var color = 'black';
        var opacity = 0.4;

        var o = document.getElementById('doc_overlay');
        if(!o) {
            var o = document.createElement('div');
			var he = documentOverlay.getDocHeight();
			var wi = documentOverlay.getDocWidth();
			
			var txt = "<div style='position:relative; height: "+he+"px;'>";
			posH = parseInt(he/2);
			txt += "<div style='position:absolute; top:"+posH+"px; width:"+wi+"px; text-align:center;'>" + "<img src='jscript/loaderBar2.gif' />" +  "</div>" +  "</div>";
			o.innerHTML = txt;
            o.id = "doc_overlay";
            documentOverlay.style(o,{
                position: 'fixed',
                top: 0,
                left: 0,
                width: '100%',
                height: documentOverlay.getDocHeight()+'px',
                background: color,
                zIndex: 1000,
                opacity: opacity,
                filter: 'alpha(opacity='+opacity*100+')'
            });
            document.getElementsByTagName('body')[0].appendChild(o);
        }
		else
		{
            documentOverlay.style(o,{background:color||'#000',display:'block', width: '100%', height: documentOverlay.getDocHeight()+'px'});
        }
    },
    hide: function() {
        var o = document.getElementById('doc_overlay');
        o.style.display = 'none';
    },
    style: function(obj,s) {
        for ( var i in s ) {
            obj.style[i] = s[i];
        }
    },
    getDocWidth: function() {
		
		var width = document.getElementById('_BODY_').clientWidth;
		return width;
    },
    getDocHeight: function() {
		
		var height = document.getElementById('_BODY_').clientHeight;
		height += 50;
		 
	   	var Y,YT;
        if( self.innerHeight ) {Y = self.innerHeight;}
        else if (document.documentElement && document.documentElement.clientHeight) {Y = document.documentElement.clientHeight;}
        if( document.body ) {YT = document.body.clientHeight;}
        if(YT>Y) {Y = YT;}
		
        if(Y > height)
			return Y;
		else
			return height;
    }
}