if (!window['videa']) window['videa']={'name':'videa'};
if (!window['videa']['classes']) window['videa']['classes']={};

if (!window['videa']['classes']['AJAX'])
window['videa']['classes']['AJAX']=function(){
  var me=this;
  me.name="system.AJAX";
  //me.sys=oSys;
  me.bag={};
  var requestid=0;
  var requests=new Array();
  var queue=new Array();
  var state=0;
  me.onStateChanged=new videa.Event(me);

  me.newRequest=function(){
    //if(me.sys.config.platformid=="2")//iwiw
      //var req=new window['videa']['classes']['OpenSocialRequestObject'](me);
    //else
      var req=new window['videa']['classes']['AJAXRequestObject'](me);
    req.id=requestid++;
    requests.push(req);
    return req;
  }
  
  me.addRequestToQueue=function(req){
    for(var i=0;i<requests.length;i++){
      if(requests[i]==req){
        queue.push(requests[i]);
        requests.splice(i,1);
        checkQueue();
        return true;
      }
    }
    return false;
  }
  
  var removeRequestFromQueue=function(req){
    for(var i=0;i<queue.length;i++){
      if(queue[i]==req){
        queue.splice(i,1);
        return;
      }
    }
  }
  
  me.listCallBack=function(req){
     req.json=false;
     try{
       req.responseText=req.text;
       req.json=eval("("+req.text+")");
     }catch(e){
       req.json={"ret":600,"errmsg":"Hibas json valasz!","data":{}};	    
       req.json.data=req.text;
     }
    
  
     if(req.callback!=null) {     
       //req.callback(req);
       try {
            req.callback.call(req.callerobject,req);
       } catch (e) {
            if (typeof (console) != 'undefined')
                console.log('[ajax call back log] ' + e.name + ': ' + e.message + ' (' + e.lineNumber + ')[' + e.fileName + ']');
       }
       
     }
     removeRequestFromQueue(req);
     checkQueue();
  }
  
  var checkQueue=function(){
    if (queue.length>0) {
      if(state==0) {
        state=1; 
        me.onStateChanged.raise(state);
      } 
    }else{ 
      if(state==1){
        state=0;
        me.onStateChanged.raise(state);
      }
    }
    if (queue.length>0 && queue[0].readyState==0){
      queue[0]._sendRequest();
    }
    return;
  }
}

if (!window['videa']['classes']['AJAXRequestObject'])
window['videa']['classes']['AJAXRequestObject']=function(oAjax){
  var me=this;
  me.name="system.AJAXRequestObject";
  var ajax=oAjax;
  var sys=ajax.sys;
  me.bag={};
  me.XmlHttpOBJ=XmlHttp.create();
  me.readyState=me.XmlHttpOBJ.readyState;
  //me.url=sys.config.siurl;//default interface
  me.callback=null;
  me.params={};
  me.requestHeaders=new Array();
  me.async=true;
  
  //put request into queue
  me.send=function(url,callback,params,caller){
    me.callerobject=this;
    if(caller!=null) me.callerobject=caller;
    if(url!=null) me.url=url;
    if(params!=null) me.params=params;else me.params={};
    if(params!=null && params.bag!=null) me.params.bag=params.bag;else me.params.bag={};
    me.callback=callback;
    if(!ajax.addRequestToQueue(me)){
      alert(sys.lang.translate("err_req_not_in_list"));
    }
  }
  
  me.setRequestHeader=function(key,value){
    me.requestHeaders.push({key:value});
  }
  
  //sendrequest 
  me._sendRequest=function(){
    var req=me;
    
    //Set default values and params
    if(req.params.method==null) req.params.method="POST";
    if(req.params.reqparams==null) req.params.reqparams={}; 
    //me.params.reqparams.platformid=sys.config.platformid;
    var paramsUrlPart="";
    if(typeof(req.params.reqparams)=="string"){
      paramsUrlPart=req.params.reqparams;
    }else
      for(var key in req.params.reqparams){
        if(paramsUrlPart!="") paramsUrlPart+="&";
        paramsUrlPart+=""+escape(key)+"="+escape(req.params.reqparams[key]);
      }
      
    paramsUrlPart = paramsUrlPart.replace( /%u0151/g, '%F5' );
    paramsUrlPart = paramsUrlPart.replace( /%u0171/g, '%FB' );
    paramsUrlPart = paramsUrlPart.replace( /%u0150/g, '%D5' );
    paramsUrlPart = paramsUrlPart.replace( /%u0170/g, '%DB' );
    
    if(req.params.method=="POST"){
      var url=req.url;
    }else if(req.params.method=="GET"){
      
      var url=req.url+"?"+paramsUrlPart;
    }
    
    //open request and set readystate function
    req.XmlHttpOBJ.open(req.params.method, url, req.async);
    req.XmlHttpOBJ.onreadystatechange = function() {
      req.readyState=req.XmlHttpOBJ.readyState;
      if (req.XmlHttpOBJ.readyState == 4){
        var liStatus=500;
        try{
          liStatus=req.XmlHttpOBJ.status;
        }catch(e){
          alert("Request status error, readyState="+lStatus+"!");
          liStatus=500;
        }
        //try{
        switch (liStatus) {
          case 404:
            req.text='{"ret":600,"errmsg":"'+sys.lang.translate("file_not_found")+'","data":{}}';
            ajax.listCallBack(req);
	          break;
          case 500:
            req.text='{"ret":600,"errmsg":"'+sys.lang.translate("request_timeout")+'","data":{}}';
	          ajax.listCallBack(req);
	          break;
          default:
            req.text=req.XmlHttpOBJ.responseText;
            ajax.listCallBack(req);
            break;
        }
        //}catch(e){
        //WebOsReq.error="Internet Connection Error!";
        //}
      }
    }
    
    //set header and send request
    if(req.params.method=="POST"){
      if(req.requestHeaders.length==0){
        req.XmlHttpOBJ.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        req.XmlHttpOBJ.setRequestHeader("Content-length", paramsUrlPart.length);
      }else{
        for(var i=0;i<req.requestHeaders;i++){
          var rh=req.requestHeaders[i];
          req.XmlHttpOBJ.setRequestHeader(rh.key,rh.value);
        }
      }
      req.XmlHttpOBJ.send(paramsUrlPart);
    }else{
      req.XmlHttpOBJ.send();
    }
  }
}


if (!window['videa']['classes']['OpenSocialRequestObject'])
window['videa']['classes']['OpenSocialRequestObject']=function(oAjax){
  var me=this;
  me.name="system.OpenSocialRequestObject";
  var ajax=oAjax;
  var sys=ajax.sys;
  me.bag={};
  me.callback=null;
  me.readyState=0;
  me.url=sys.config.siurl;//default interface
  
  me.osRespObj=null;
  me.params={};
  me.requestHeaders=new Array();
  me.async=true;
  
  //put request into queue
  me.send=function(url,callback,params){
    if(url!=null) me.url=url;
    if(params!=null) me.params=params;else me.params={};
    if(params!=null && params.bag!=null) me.params.bag=params.bag;else me.params.bag={};
    me.callback=callback;
    if(!ajax.addRequestToQueue(me)){
      alert(sys.lang.translate("err_req_not_in_list"));
    }
  }
  
  me.setRequestHeader=function(key,value){
    me.requestHeaders.push({key:value});
  }
  
  //sendrequest 
  me._sendRequest=function(){
    me.readyState=1;
    if(me.params.method==null) me.params.method="POST";
    if(me.params.reqparams==null) me.params.reqparams={}; 
    me.params.reqparams.platformid=sys.config.platformid;
    me.params.reqparams.st=shindig.auth.getSecurityToken();
    if(sys.sid!=null)
      me.params.reqparams.SYSSID=sys.sid;
    var osReqRarams = {};
    osReqRarams[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.TEXT;
    if(me.params.method=="POST")
      osReqRarams[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
    else
      osReqRarams[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;
    var postdata=me.params.reqparams;
    postdata = gadgets.io.encodeValues(postdata);
    osReqRarams[gadgets.io.RequestParameters.POST_DATA] = postdata;
    osReqRarams[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.SIGNED;
    osReqRarams[gadgets.io.RequestParameters.OAUTH_SERVICE_NAME] = "service1";
    gadgets.io.makeRequest(me.url, me.callBack, osReqRarams);
  }
  
  me.callBack=function(resp){
    if(resp.headers && resp.headers['set-cookie']){
      sys.sid=getFirstCookieFromString(resp.headers['set-cookie'][0]);
      //var url=sys.config.siurl+"?cmd=setcookie&value="+sys.sid;//+'&fmt=jsfunc&sysname='+sys.config.sysglobalname;
      //sys.upload.targetFrame.src=url;
      //setCookie("webos",sys.sid,null,sys.config.sysdomain+"/");
    }
    me.osRespObj=resp;
    me.text=me.osRespObj.text;
    ajax.listCallBack(me);
  }
}
window['videa']['AJAX']=new videa.classes.AJAX();