﻿/*
    Emedia.Core.XapLib
    
    Couche XAP 2.0 EMEDIA CONTACT X    
*/


var XapLib = function()
{
    ///<summary>Classe de base qui définit
    /// une classe comme classe xap</summary>    
}

XapLib._call = function(obj_name,meth_name,args,callback)
{
    var xhr = null;
    if(typeof(ActiveXObject)!="undefined")
    {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else
    {
        xhr = new XMLHttpRequest();
    }
    var url = "xaplib.aspx?qkey=0123456789T&o="+
        obj_name+"&m="+meth_name;
    for(argc=0;argc<args.length;argc++)
        url+="&arg"+argc+"="+args[argc];
    url+="&rand="+Math.random();
    xhr.open("GET",encodeURI(url),true);
    xhr.onreadystatechange = function()
    {
        if(xhr.readyState == 4)
        {
            if(xhr.status == 200)
            {            
                callback(xhr.responseText);
            }
        }
    }
    xhr.send(null);
}

XapLib._make = function(obj)
{
    ///<summary>Modifie les methodes de la classe 
    /// passé en parametre pour les ajaxiser</summary>
    
    // class name regex 
    var obj_name = /[A-Za-z0-9]*(?=\()/.exec(obj.constructor);
    
    //method name regex [A-Za-z0-9]*$
    //method args regex [A-Za-z0-9\,\_]*(?=\))    
    var t=obj;
    for(i in t)
    {
        var methodbody = t[i];
        var args = /[A-Za-z0-9\,\_\ ]*(?=\))/.exec(methodbody);
        var name = i;
        var xapcall = "var args = new Array();\n";
        var args_array = args[0].split(",");
        for(a=0;a<args_array.length-1;a++)
        {
            xapcall += "args[args.length]="+args_array[a]+";\n";
        }
        xapcall += "_xap._call('"+obj_name+"','"+name+
            "',args,"+args_array[args_array.length-1]+");\n";
        t[i] = new Function(args[0],xapcall);
    }
    return t;
}

var _xap = XapLib;

