﻿

function f_getObjectName(a_object) 
{  
    var v_objSt = a_object.toString();   
    
    var v_i = v_objSt.indexOf("function");
    if(v_i!=-1)
    {
        var v_end = v_objSt.indexOf("(",v_i+9);
        return v_objSt.substring(v_i+9,v_end-v_i);
    }   
    else return "";
};

function f_copyPrototype(a_descendant,a_parent) 
{  
    var v_parentSt = a_parent.toString();   
    
    var v_i = v_parentSt.indexOf("function");
    if(v_i!=-1)
    {
        var v_end = v_parentSt.indexOf("(",v_i+9);
        var v_name = v_parentSt.substring(v_i+9,v_end-v_i);
        a_descendant.prototype[v_name] = a_parent; 
    }   
    for (var v_m in a_parent.prototype) 
    {   
        a_descendant.prototype[v_m] = a_parent.prototype[v_m];   
    }   
};  



function f_isDefined(a_variable)
{
    return eval("window."+a_variable);
};

function f_createObject()
{
    var v_objName = f_createObject.arguments[0];
    
    var v_argArr = new Array();
    for(var v_i=1;v_i<f_createObject.arguments.length;v_i++)
    {
        v_argArr.push(f_createObject.arguments[v_i]);
    }
    
    var v_objType = f_isDefined(v_objName);
    if(v_objType!=null) return f_createLocalObject(v_objType,v_argArr);
    else
    {
        if(m_debug>0)
        {
            alert("public func call can't find func "+v_objName);
            return;
        }

        var v_files = m_commsManager.f_sendBlockingRequest("PublicFunctions",f_xmlitem("u",m_userguid,"func",v_objName));
        
        if(v_files==null)
        {
            var v_xmlres = m_commsManager.f_sendBlockingRequest("ErrorLog",f_xmlitem("u",m_userguid,"e","cant createObject "+v_objName+" in public list","d",m_data_keepalive.join("|")));
            f_sessionexpired(); 
            return;
        }
        else
        {
            var v_filename = f_singleNodeText(v_files,"file/filename");
        
            m_loadingPublicFunc = true;
            m_animateLoading.f_start_animate("ladoingjs");
            var v_content = m_commsManager.f_getJsContent(v_filename);
            f_callbackloadjs(v_filename,v_content,false);
            var v_objType = f_isDefined(v_objName);
            // for slow browsers that dont register the finc
            var v_sleeptime = 0;
            while(v_objType==null)
            {
                v_sleeptime = v_sleeptime+1;
                var v_xmlres = m_commsManager.f_sendBlockingRequest("PublicFunctionsSleep",f_xmlitem("u",m_userguid,"s",500));
                if(v_xmlres==null) f_sessionexpired();
                if(v_sleeptime<10)
                {
                    var v_xmlres = m_commsManager.f_sendBlockingRequest("ErrorLog",f_xmlitem("u",m_userguid,"e","wait for createObject "+v_objName+" file "+v_name,"d",m_data_keepalive.join("|")));
                    f_sessionexpired();
                    return;
                }
            }
            m_animateLoading.f_stop_animate();
            m_loadingPublicFunc = false;
            if(v_objType!=null) return f_createLocalObject(v_objType,v_argArr);
            else f_callpublicfunc("f_public_errorAlert","call createObject "+v_objName+" func not set",true);
        }
    }
}

function f_createLocalObject(a_objType,a_argArr)
{
    switch(a_argArr.length)
    {
        case 0 : return new a_objType();break;
        case 1 : return new a_objType(a_argArr[0]);break;
        case 2 : return new a_objType(a_argArr[0],a_argArr[1]);break;
        case 3 : return new a_objType(a_argArr[0],a_argArr[1],a_argArr[2]);break;
        case 4 : return new a_objType(a_argArr[0],a_argArr[1],a_argArr[2],a_argArr[3]);break;
        case 5 : return new a_objType(a_argArr[0],a_argArr[1],a_argArr[2],a_argArr[3],a_argArr[4]);break;
        case 6 : return new a_objType(a_argArr[0],a_argArr[1],a_argArr[2],a_argArr[3],a_argArr[4],a_argArr[5]);break;
        default : f_callpublicfunc("f_public_errorAlert","too many paremetrs in createLocalObject "+a_objType,true);break;
    }
}



