/*
 @ Carl Declercq
 @ Purose some connection possibilitys to database
 */
/* ----------------------------------------------------------------------*/
/**************************************************************
 * func : ExecuteQuery(database, sql, ResultFunction)
 * purpose : execute som query on the database
 * remarks : when the result is returned in the ResultFunction
 **************************************************************/
function ExecuteQuery2(dba,sql,func,param)
{
   var req2 = new ServerRequest();
   req2.server = 'class/dbQuery.php';
   req2.add("con_datasource",dba);
   req2.add('layout','no layout');
   req2.add('sql',sql);
   req2.setCallFunction(func,param);
   req2.execute();
}
/* ----------------------------------------------------------------------*/
/* 
   purpose : easy function to excute a query to the database 
      oreq = xhr object (ASC)
      sRequest = string argument database(weavelink) sql(delete from table where id='1')
      fResult = function to call when finish the query (ASC)
 */
function ExecuteQuery(oReq,sRequest,fResult,bSyncronous)
{
   if(!oReq)
   {
      return;
   }

   var statements = GetStatements(sRequest);
   var nr_statements = statements["name"].length;
   var fl_casesensitive = 0,database = "tree_structure_intranet",sql = "",lang=document.forms[0].elements['lang'].value,sResultArgs,action,layout='nolayout';
   
   for(j=0;j<nr_statements;j++)
   {
      switch(statements["name"][j])
      {
         case "language":
            lang = statements["argument"][j];
            break;
         
         case "action":
            action = statements["argument"][j];
            break;
            
         case "database":
            database = statements["argument"][j];
            break;
         
         case "sql":
            sql = statements["argument"][j];
            break;

         case "fl_casesensitive":
            fl_casesensitive = statements["argument"][j]; 
            break;
            
         case "arguments":
            sResultArgs = statements["argument"][j];
            break;
         
         case "layout":
            layout= statements["argument"][j];
            break;

         default : 
            break;
      }
   }

   var request  = "<PAGE>" 
                +    "<DECLARATIONS>"  
                +       '<VARIABLE type="string">'  
                +          "<NAME>lang</NAME>"  
                +       "</VARIABLE>"
                +       '<VARIABLE type="integer">'
                +          "<NAME>error</NAME>"
                +          "<VALUE>0</VALUE>"
                +       "</VARIABLE>"
                +       '<VARIABLE type="string">'
                +          "<NAME>database</NAME>"
                +       "</VARIABLE>"
                +       '<VARIABLE type="string">'
                +          "<NAME>sql</NAME>"  
                +       "</VARIABLE>"
                +       '<VARIABLE type="integer">'
                +          "<NAME>fl_casesensitive</NAME>"  
                +       "</VARIABLE>"
                +       '<VARIABLE type="table">'
                +          "<NAME>result</NAME>"
                +       "</VARIABLE>"
                +       '<VARIABLE type="string_array">'
                +          "<NAME>sresult</NAME>"
                +       "</VARIABLE>"                
                +    "</DECLARATIONS>"
                +    '<#FUNCTION>ExecuteQuery($database, $sql, $fl_casesensitive, $result)</#FUNCTION>'
                +    '<#FUNCTION>ConvertTableToArray($error,$result,$sresult)</#FUNCTION>'
                +    '<#EXPRESSION>$error=$sresult[0]</#EXPRESSION>'
                +    '<#IF expression="$error=0">'
                +       "<#THEN>"
                +          '<MESSAGE type="info">__TEXT:$lang:Intranet302__</MESSAGE>'
                +       "</#THEN>"
                +       "<#ELSE>"
                +          '<MESSAGE type="error">__TEXT:$lang:Intranet303__ $result[0]</MESSAGE>'
                +       "</#ELSE>"                
                +    '</#IF>'
                + "</PAGE>";

   

   if(oReq.IsBusy())
   {
      AddMessage(new vdwmessage('error',messages[language][20]),'error_message_line');
      return ;
   }
   sql = RemoveQuotes(sql);
   
   oReq.cleanRequest();
   oReq.methode = "POST";   

   if(bSyncronous)
      oReq.setSynchronous();
   
   oReq.server = 'content.php';
   oReq.add('xml_string',        escape(request));
   oReq.add('lang',              lang);
   oReq.add('database',          database);
   oReq.add('sql',               escape(sql));
   oReq.add('fl_casesensitive',  fl_casesensitive);
     
   oReq.add('layout',layout);
   
   oReq.setIndicatorFunction(SetIndicator,action);
   
   if(fResult)
      oReq.setCallFunction(fResult,sResultArgs);
   
   if(!oReq.execute())
   {
      AddMessage(new vdwmessage('error',messages[language][21]),'error_message_line');
   }

   if(bSyncronous)
      return oReq;   
}

function SynchronizeExecuteQuery(oReq,sRequest)
{
   return ExecuteQuery(oReq,sRequest,null,true);
}

/* ------------------------------------------------------------ 
   purpose : easy function to return a resultset from a query to the database in table item. 
      oReq = xhr object (ASC)
      sRequest = string argument database(weavelink) sql(select * from table)
      fResult = function to call when finish the query (ASC)
   ------------------------------------------------------------ */
function DataQuery(oReq,sRequest,fResult,bSyncronous)
{
   if(!oReq)
   {
      return;
   }
   
   var statements = GetStatements(sRequest);

   var nr_statements = statements["name"].length;
   var fl_casesensitive = 0,database = "tree_structure_intranet",sql = "",lang=document.forms[0].elements['lang'].value,sResultArgs,action,layout='nolayout';
   
   for(j=0;j<nr_statements;j++)
   {
      switch(statements["name"][j])
      {
         case "language":
            lang = statements["argument"][j];
            break;
         
         case "action":
            action = statements["argument"][j];
            break;
            
         case "database":
            database = statements["argument"][j];
            break;
         
         case "sql":
            sql = statements["argument"][j];
            break;

         case "fl_casesensitive":
            fl_casesensitive = statements["argument"][j]; 
            break;
            
         case "arguments":
            sResultArgs = statements["argument"][j];
            break;
         
         case "layout":
            layout= statements["argument"][j];
            break;

         default : 
            break;
      }
   }
   sql = RemoveQuotes(sql);
   
   var request  = "<PAGE>" 
                +    "<DECLARATIONS>" 
                +       '<VARIABLE type="integer">'
                +          "<NAME>error</NAME>" 
                +       "</VARIABLE>"                
                +       '<VARIABLE type="string">'  
                +          "<NAME>lang</NAME>"  
                +       "</VARIABLE>"
                +       '<VARIABLE type="integer">'
                +          "<NAME>cnt</NAME>"
                +       "</VARIABLE>"
                +       '<VARIABLE type="string">'
                +          "<NAME>database</NAME>"
                +       "</VARIABLE>"
                +       '<VARIABLE type="string">'
                +          "<NAME>sql</NAME>"  
                +       "</VARIABLE>"
                +       '<VARIABLE type="integer">'
                +          "<NAME>fl_casesensitive</NAME>"  
                +       "</VARIABLE>"
                +       '<VARIABLE type="table">'
                +          "<NAME>result</NAME>"
                +       "</VARIABLE>"
                +       '<VARIABLE type="string">'
                +          "<NAME>query_string</NAME>"  
                +       "</VARIABLE>"                
                +    "</DECLARATIONS>"
                +    '<#FUNCTION>ExecuteQuery($error,$database, $sql, $fl_casesensitive, $result)</#FUNCTION>'
                +    '<#EXPRESSION>$cnt=0</#EXPRESSION>'
                +    '<#IF expression="$error=0">'
                +       '<#THEN>'
                +          '<ITEM type="table">'
                +             '<#FOR_EACH var="$query_string" in="$result">'
                +                '<#IF expression="$cnt=0">'
                +                   "<#THEN>"
                +                      '<TITLEROW>$query_string</TITLEROW>'
                +                      "<#EXPRESSION>$cnt=5</#EXPRESSION>"                
                +                   "</#THEN>"
                +                   "<#ELSE>"
                +                      '<ROW>$query_string</ROW>'
                +                   "</#ELSE>"                
                +                '</#IF>'
                +             '</#FOR_EACH>'
                +          '</ITEM>'
                +       '</#THEN>'
                +       '<#ELSE>'
                +          '<MESSAGE type="error">__TEXT:$lang:Intranet303__ $error</MESSAGE>'
                +       '</#ELSE>'
                +    '</#IF>'
                + "</PAGE>";

   

   if(oReq.IsBusy())
   {
      AddMessage(new vdwmessage('error',messages[language][20]),'error_message_line');
      return ;
   }

   oReq.cleanRequest();
   oReq.methode = "POST";   

   if(bSyncronous)
      oReq.setSynchronous();

   oReq.server = 'content.php';
   oReq.add('xml_string',        escape(request));
   oReq.add('lang',              lang);
   oReq.add('database',          database);
   oReq.add('sql',               escape(sql));
   oReq.add('fl_casesensitive',  fl_casesensitive);
     
   oReq.add('layout',layout);
   
   oReq.setIndicatorFunction(SetIndicator,action);
  
   if(fResult)
      oReq.setCallFunction(fResult,sResultArgs);
   
   if(!oReq.execute())
   {
      AddMessage(new vdwmessage('error',messages[language][21]),'error_message_line');
   }

   if(bSyncronous)
     return oReq; 
}

function SynchronizeDataQuery(oReq,sRequest)
{
   return DataQuery(oReq,sRequest,null,true);
}


