var callbacktemp;
var urltemp;
var requestdatatemp;
var serviceswitch;
var isonline = true;
var interval;
var searchdata = false;


function checknetworkInfo(is_online){
  if(is_online.type == "offline"){
     isonline = false;
     }
     else {
       isonline = true;
     }
     }
   function checkOnline(){
     if(isonline == false){
        showAlert("Please check your internet connection!!!", false);
        }
        else {
          return true;
        }
      }
//offline check
document.addEventListener("offline", checknetworkInfo, false);
//offline check
document.addEventListener("online", checknetworkInfo, false);



   //error status
   function errorStatus(request, status, error){
      showAlert("Oops! Something went wrong, please try again later.", false);
   }
//common request and response
function Apiservicecall(callback,Url,Requestdata)
{
  serviceswitch = 1;
  callbacktemp=callback;
  urltemp=Url;
  requestdatatemp=Requestdata;
  var access_token=getItem("access_token");
  console.log("Api service access_token----->"+access_token);
  console.log("Api service refresh_token----->"+getItem("refresh_token"));
  var ajax_url=Url+"?access_token="+access_token
  console.log("Api service Url AXA----->"+ajax_url);
  var esubmissionidObj = { esubmissionuserid: getItem("esubmissionuserid"),referenceData:getItem("referenceData") };
  Requestdata =  objectmerge(Requestdata,esubmissionidObj);
  console.log("Api service data AXA----->"+ JSON.stringify(Requestdata));
  $.ajax({
    type: 'POST',
    beforeSend: function () {
      $('.loading-mask').removeClass('stop-loading')
    },
    url: ajax_url,
    dataType: 'json',
    crossDomain: true,
    data: JSON.stringify(Requestdata),
    contentType: 'application/json; charset=utf-8',
    success: function (response) {
      console.log("Api service reponse AXA----->"+JSON.stringify(response));
      $('.loading-mask').addClass('stop-loading');
      if(response.status==1&&!isEmpty(response.referenceData))
      {
          setItem("referenceData", response.referenceData);
      }
      callback({response: response, status: 1});
    },
    error: function (request, status, error) {
      console.log("Api service reponse AXA-----> status " + status);
      console.log("Error request status text: " + request.statusText);
      console.log("Error request status: " + request.status);
      console.log("Error request response text: " + request.responseText);
      console.log("Error response header: " + request.getAllResponseHeaders());
      $('.loading-mask').addClass('stop-loading');
     if(request.status==401)
      {
        console.log("Error request status:======**********=====" + request.status);
		  var oauthrequest = { grant_type: 'password', username: passEncrypt(getItem("esubmissionuserid")), password: getItem("password")};
        OAuthexpire(function(result)
        {
          if(result.status==1)
          {
            var response=result.response;
            setItem("access_token", response.access_token);
            setItem("refresh_token", response.refresh_token);
            console.log(""+JSON.stringify(response.access_token));
            Apiservicecall(callbacktemp,urltemp,requestdatatemp);
          }
        },oauthtoken,oauthrequest);
      }
      else{
        errorStatus(request, status, error);
      }
      callback({response:null, status: 0});
    }
  });
}

//common request and response
function Apiservicecallp2(callback,Url,Requestdata)
{
  serviceswitch = 1;
  callbacktemp=callback;
  urltemp=Url;
  requestdatatemp=Requestdata;
  var access_token=getItem("access_token");
  console.log("Api service access_token----->"+access_token);
  console.log("Api service refresh_token----->"+getItem("refresh_token"));
  var ajax_url=Url+"?access_token="+access_token
  console.log("Api service Url AXA----->"+ajax_url);
  var esubmissionidObj = { esubmissionuserid: getItem("esubmissionuserid"),referenceData:getItem("referenceData") };
  Requestdata =  objectmerge(Requestdata,esubmissionidObj);
  var encrypted_request = {requestdata: passEncrypt(JSON.stringify(Requestdata))};
  console.log("encripted json request",JSON.stringify(encrypted_request));
  $.ajax({
    type: 'POST',
    beforeSend: function () {
      $('.loading-mask').removeClass('stop-loading')
    },
    url: ajax_url,
    dataType: 'json',
    crossDomain: true,
    data: JSON.stringify(encrypted_request),
    contentType: 'application/json; charset=utf-8',
    success: function (responseEncrypted) {
      console.log("Api service reponse AXA----->"+JSON.stringify(responseEncrypted));
	  var response = passDecrypt(responseEncrypted.responsedata);
	  if(!isEmpty(response))
  	{
		
  	    response = JSON.parse(response);
  	}
      $('.loading-mask').addClass('stop-loading');
      if(response.status==1&&!isEmpty(response.referenceData))
      {
          setItem("referenceData",response.referenceData);
      }
      callback({response: response, status: 1});
    },
    error: function (request, status, error) {
      console.log("Api service reponse AXA-----> status " + status);
      console.log("Error request status text: " + request.statusText);
      console.log("Error request status: " + request.status);
      console.log("Error request response text: " + request.responseText);
      console.log("Error response header: " + request.getAllResponseHeaders());
      $('.loading-mask').addClass('stop-loading');
     if(request.status==401)
      {
        console.log("Error request status:======**********=====" + request.status);
		  var oauthrequest = { grant_type: 'password', username: passEncrypt(getItem("esubmissionuserid")), password: getItem("password")};
        OAuthexpire(function(result)
        {
          if(result.status==1)
          {
            var response=result.response;
            setItem("access_token", response.access_token);
            setItem("refresh_token", response.refresh_token);
            console.log(""+JSON.stringify(response.access_token));
            Apiservicecall(callbacktemp,urltemp,requestdatatemp);
          }
        },oauthtoken,oauthrequest);
      }
      else{
        errorStatus(request, status, error);
      }
      callback({response:null, status: 0});
    }
  });
}

//object merge
 function objectmerge(Requestdata, esubmissionidObj) {
 for (var key in esubmissionidObj) {
  Requestdata[key] = esubmissionidObj[key];
 }
 return Requestdata;
}
//policies implementation
function Apiservicecallpolicies(callback,Url,Requestdata)
{
  serviceswitch = 2;
  callbacktemp=callback;
  urltemp=Url;
  requestdatatemp=Requestdata;
  var access_token=getItem("access_token");
  console.log("Api service access_token----->"+access_token);
  console.log("Api service refresh_token----->"+getItem("refresh_token"));
  var ajax_url=Url+"?access_token="+access_token
  console.log("Api service Url AXA----->"+ajax_url);
  Requestdata = Object.assign( { esubmissionuserid: getItem("esubmissionuserid"),referenceData:getItem("referenceData") }, Requestdata );
  console.log("Api service data AXA----->"+ JSON.stringify(Requestdata));
  $.ajax({
    type: 'POST',
    beforeSend: function () {
    },
    url: ajax_url,
    dataType: 'json',
    crossDomain: true,
    data: JSON.stringify(Requestdata),
    contentType: 'application/json; charset=utf-8',
    success: function (response) {
      console.log("Api service reponse AXA----->"+JSON.stringify(response));
      $('.loading-mask').addClass('stop-loading');
      searchdata = false;
      if(response.status==1&&!isEmpty(response.referenceData))
      {
          setItem("referenceData", response.referenceData);
      }
      callback({response: response, status: 1});
    },
    error: function (request, status, error) {
      console.log("Api service reponse AXA-----> status " + status);
      console.log("Error request status text: " + request.statusText);
      console.log("Error request status: " + request.status);
      console.log("Error request response text: " + request.responseText);
      console.log("Error response header: " + request.getAllResponseHeaders());
     if(request.status==401)
      {
        console.log("Error request status:======**********=====" + request.status);
		  var oauthrequest = { grant_type: 'password', username: passEncrypt(getItem("esubmissionuserid")), password: getItem("password")};
        if( searchdata == false ){
        OAuthexpire(function(result)
        {
          if(result.status==1)
          {
            searchdata = true;
            var response=result.response;
            setItem("access_token", response.access_token);
            setItem("refresh_token", response.refresh_token);
            console.log(""+JSON.stringify(response.access_token));
            Apiservicecallpolicies(callbacktemp,urltemp,requestdatatemp);
          }
        },oauthtoken,oauthrequest);
      }
    }
      else{
        errorStatus(request, status, error);
      }
      callback({response:null, status: 0});
    }
  });
}


// Oauth implementation
function OAuth(callback,Url,Requestdata)
{
  console.log("Api service Url AXA----->"+Url);
  console.log("Api service data AXA----->"+ JSON.stringify(Requestdata));

  $.ajax({
    type: 'POST',
    timeout: 12000,
    data: Requestdata,
    crossDomain: true,
    headers: {"Authorization": "Basic b244K2RNV0twVXJHOWZlTEw0SVZCdz09Okt3ZFVHTURNRlNhTzlSVEVwTjl1SG5uOUlpNElGcTV3TW9VenFDOXk1QVk9","Username":"on8+dMWKpUrG9feLL4IVBw==","Password":"KwdUGMDMFSaO9RTEpN9uHnn9Ii4IFq5wMoUzqC9y5AY="},
    // beforeSend: function () {
    //   $('.loading-mask').removeClass('stop-loading')
    // },
    url: Url,
    dataType: 'json',
    Accept: "application/json; charset=UTF-8",
    success: function (response) {
      console.log("Api service reponse AXA----->"+JSON.stringify(response));
      // $('.loading-mask').addClass('stop-loading');
      callback({response: response, status: 1});
    },
    error: function (request, status, error) {
      console.log("Api service reponse AXA-----> status " + status);
      console.log("Error request status text: " + request.statusText);
      console.log("Error request status: " + request.status);
      console.log("Error request response text: " + request.responseText);
      console.log("Error response header: " + request.getAllResponseHeaders());
      $('.loading-mask').addClass('stop-loading');
      errorStatus(request, status, error);
      callback({response:null, status: 0});
    }
  });
}
// Oauth Expire refresh
function OAuthexpire(callback,Url,Requestdata)
{
  console.log("Api service Url AXA----->"+Url);
  console.log("Api service data AXA----->"+ JSON.stringify(Requestdata));
  var body = {
    grant_type: 'refresh_token',
    refresh_token: getItem("refresh_token"),
  };
  $.ajax({
    type: 'POST',
    timeout: 12000,
    data: body,
    crossDomain: true,
    headers: {"Authorization": "Basic b244K2RNV0twVXJHOWZlTEw0SVZCdz09Okt3ZFVHTURNRlNhTzlSVEVwTjl1SG5uOUlpNElGcTV3TW9VenFDOXk1QVk9","Username":"on8+dMWKpUrG9feLL4IVBw==","Password":"KwdUGMDMFSaO9RTEpN9uHnn9Ii4IFq5wMoUzqC9y5AY="},
    beforeSend: function () {
      $('.loading-mask').removeClass('stop-loading')
    },
    url: Url,
    dataType: 'json',
    Accept: "application/json; charset=UTF-8",
    success: function (response) {
      console.log("Api service reponse AXA----->"+JSON.stringify(response));
      $('.loading-mask').addClass('stop-loading');
      callback({response: response, status: 1});
    },
    error: function (request, status, error) {
      console.log("Api service reponse AXA-----> status " + status);
      console.log("Error request status text: " + request.statusText);
      console.log("Error request status: " + request.status);
      console.log("Error request response text: " + request.responseText);
      console.log("Error response header: " + request.getAllResponseHeaders());
      $('.loading-mask').addClass('stop-loading');
      if(request.status==400||request.status==401)
      {
        var oauthrequest = { grant_type: 'password', username: passEncrypt(getItem("esubmissionuserid")), password: getItem("password")};
        OAuth(function(result)
        {
          if(result.status==1)
          {
            var response=result.response;
            setItem("access_token", response.access_token);
            setItem("refresh_token", response.refresh_token);
            console.log(""+JSON.stringify(response.access_token));
            if(serviceswitch == 1){
                  Apiservicecall(callbacktemp,urltemp,requestdatatemp);
            }
            else if(serviceswitch == 2){
                  Apiservicecallpolicies(callbacktemp,urltemp,requestdatatemp);
            }
            else if(serviceswitch == 3){
                  Apidropdownservice(callbacktemp,urltemp,requestdatatemp)
            }

          }
        },oauthtoken,oauthrequest);
      }
      else{
        errorStatus(request, status, error);
      }
    }
  });
}
//Oath call function
function Oauthcall(UserName,PassWord,logindata)
{
  var oauthrequest;
  if(logindata.data.esubmissionuserid!=null){
    oauthrequest = { grant_type: 'password', username: passEncrypt(logindata.data.esubmissionuserid), password: PassWord};
  }
  else{
    oauthrequest = { grant_type: 'password', username: UserName, password: PassWord};
  }
  
  OAuth(function(result)
  {
    if(result.status==1)
    {
      setItem("username", UserName);
      setItem("password", PassWord);
      var response=result.response;
      setItem("access_token", response.access_token);
      setItem("refresh_token", response.refresh_token);
      console.log(""+JSON.stringify(response.access_token));
      setItem("agentcode", logindata.data.agentcode);
      setItem("agentname", logindata.data.agentname);
      setItem("creationdate", logindata.data.createdatetime);
      window.location.href = 'dashboard.html';
    }
  },oauthtoken,oauthrequest);
}
//commonauthenticationinservice
function loginautenticationcommon(request){
  console.log("Api service Url AXA----->"+loginurl);
  console.log("Api service data AXA----->"+ JSON.stringify(request));
  $.ajax({
    type: 'POST',
    timeout: 12000,
    beforeSend: function () {
      $('.loading-mask').removeClass('stop-loading')
    },
    // complete: function () {
    //   $('.loading-mask').addClass('stop-loading');
    // },
    url: loginurl,
    dataType: 'json',
    data: JSON.stringify(request),
    contentType: 'application/json; charset=utf-8',
    success: function (response) {
      console.log(response);
      if (response.status == 1) {
        var responselist = response.data.paymentconfigvaluelist;
        if(responselist!=null){
        for(var i=0;i<responselist.length;i++){
          if(responselist[i].configdescription == "paymentId" && responselist[i].configdescription !=null){
            setItem("paymentid",responselist[i].configvalue);
          }
          if(responselist[i].configdescription == "merchantKey" && responselist[i].configdescription !=null){
            setItem("merchentkey",responselist[i].configvalue);
          }
          if(responselist[i].configdescription == "merchantCode" && responselist[i].configdescription !=null){
            setItem("merchantcode",responselist[i].configvalue);
          }
          if(responselist[i].configdescription == "currency" && responselist[i].configdescription !=null){
            setItem("paycurrency",responselist[i].configvalue);
          }
          if(responselist[i].configdescription == "lang" && responselist[i].configdescription !=null){
            setItem("language",responselist[i].configvalue);
          }
          if(responselist[i].configdescription == "country" && responselist[i].configdescription !=null){
            setItem("permanentcountry",responselist[i].configvalue);
          }
        }
      }
        setItem("sessionTimeout",response.data.sessionTimeout)
        setItem("userlist",JSON.stringify(response.data.userAgentResponseList));
        setItem("esubmissionuserid",""+response.data.esubmissionuserid);
        setItem("logindeviceid",""+response.data.loginlogid);
        setItem("notification", response.notificationmessage);
        setItem("referenceData", response.referenceData);
        var passWord=request.password;
        if(response.data.firstloginind == "Y" && response.data.resetind == "N"){
          $('.loading-mask').addClass('stop-loading');
          firstloginuser();
        }
        else{
          if(response.data.userAgentResponseList.length==1){
              if(response.data.userAgentResponseList[0].piamcode=="" || response.data.userAgentResponseList[0].piamcode==null || response.data.userAgentResponseList[0].piamcode==undefined){
                      $('.loading-mask').addClass('stop-loading');
                      piamalert("PIAM code is not available!");
              }
              else{
                  setItem("smartpolicyind", response.data.userAgentResponseList[0].smartpolicyind);
                  setItem("issingleagent", "1");
                  setItem("smartpolicymotorind", response.data.userAgentResponseList[0].smartpolicymotorind);
                  Oauthcall(request.emailid,passWord,response);
              }
          }
          else{
                 Oauthcall(request.emailid,passWord,response);
          }
        }
      }
      else if(response.status == 3){
        commonPasswordReset(response.message);
      }
      else if(response.status == 2){
        commonPasswordReset(response.message);
      }
      else{
        $('.loading-mask').addClass('stop-loading');
        showAlert(response.message, false);
        }
    },
    error: function (request, status, error) {
      $('.loading-mask').addClass('stop-loading');
      console.log("Error status " + status);
      console.log("Error request status text: " + request.statusText);
      console.log("Error request status: " + request.status);
      console.log("Error request response text: " + request.responseText);
      console.log("Error response header: " + request.getAllResponseHeaders());
      errorStatus(request, status, error);
    }
  });
}
function commonPasswordReset(response){
  $('.loading-mask').addClass('stop-loading');
  setItem("passExpired",response);
  showpasret();
}
//logoff logoutfunction
function Apilogoutservicecall(Url,Requestdata)
{
  Requestdata = Object.assign( { esubmissionuserid: getItem("esubmissionuserid") }, Requestdata );
  console.log("Api service Url AXA----->"+Url);
  console.log("Api service data AXA----->"+ JSON.stringify(Requestdata));
  $.ajax({
    type: 'POST',
    timeout: 12000,
    beforeSend: function () {
      $('.loading-mask').removeClass('stop-loading')
    },
    complete: function () {
      $('.loading-mask').addClass('stop-loading');
    },
    url: Url,
    dataType: 'json',
    data: JSON.stringify(Requestdata),
    contentType: 'application/json; charset=utf-8',
    success: function (response) {
      console.log(response);
      if (response.status == 1) {
          localStorage.clear();
		      window.location.href = 'login.html';
      }
    },
    error: function (request, status, error) {
      localStorage.clear();
      window.location.href = 'login.html';
    }
  });
}
//version check service
function Apiversioncheck(callback,Url,Requestdata)
{
  $.ajax({
    type: 'POST',
    beforeSend: function () {
      $('.loading-mask').removeClass('stop-loading')
    },
    complete: function () {
      $('.loading-mask').addClass('stop-loading');
    },
    url: Url,
    crossDomain: true,
    dataType: 'json',
    data: JSON.stringify(Requestdata),
    contentType: 'application/json; charset=utf-8',
    success: function (response) {
      console.log(response);
        callback({response: response, status: 1});
    },
    error: function (request, status, error) {
    // noting should be done
    }
  });
}


//version check service
function Apidropdownservice(callback,Url,Requestdata)
{
  serviceswitch = 3;
  callbacktemp=callback;
  urltemp=Url;
  requestdatatemp=Requestdata;
  var esubmissionidObj = { esubmissionuserid: getItem("esubmissionuserid"),referenceData:getItem("referenceData") };
  Requestdata =  objectmerge(Requestdata,esubmissionidObj);
  var access_token=getItem("access_token");
  console.log("Api service access_token----->"+access_token);
  console.log("Api service refresh_token----->"+getItem("refresh_token"));
  var ajax_url=Url+"?access_token="+access_token
  console.log("Api service Url AXA----->"+ajax_url);

  $.ajax({
    type: 'POST',
    url: ajax_url,
    crossDomain: true,
    dataType: 'json',
    data: JSON.stringify(Requestdata),
    contentType: 'application/json; charset=utf-8',
    success: function (response) {
      console.log(response);
        callback({response: response, status: 1});
    },
    error: function (request, status, error) {
        console.log("Api service reponse AXA-----> status " + status);
        console.log("Error request status text: " + request.statusText);
        console.log("Error request status: " + request.status);
        console.log("Error request response text: " + request.responseText);
        console.log("Error response header: " + request.getAllResponseHeaders());
        $('.loading-mask').addClass('stop-loading');
        if(request.status==401)
          {
            console.log("Error request status:======**********=====" + request.status);
          var oauthrequest = { grant_type: 'password', username: passEncrypt(getItem("esubmissionuserid")), password: getItem("password")};
            OAuthexpire(function(result)
            {
              if(result.status==1)
              {
                var response=result.response;
                setItem("access_token", response.access_token);
                setItem("refresh_token", response.refresh_token);
                console.log(""+JSON.stringify(response.access_token));
                Apidropdownservice(callbacktemp,urltemp,requestdatatemp);
              }
            },oauthtoken,oauthrequest);
          }
          else{
            errorStatus(request, status, error);
          }
          callback({response:null, status: 0});
          }
    });
}


// logout when idle
function idleLogout() {
    if (!isEmpty(getItem("agentcode"))){
	var resettimeout = getItem("sessionTimeout");
  	clearInterval(interval);
    window.onload = showTimer(resettimeout);
  }
}
    function touchend() {
      if (!isEmpty(getItem("agentcode"))){
      var resettimeout = getItem("sessionTimeout");
      clearInterval(interval);
      showTimer(resettimeout);
      isreset=true;
    }
    }
    function showTimer( seconds) {
    var startTime = Date.now();

    function showRemaining() {
      var delta = Date.now() - startTime;     // milliseconds
      var deltaSeconds = delta / (1000);
      if (deltaSeconds < seconds) {
        // console.log("===="+Math.round(seconds - deltaSeconds));
      } else {
        logout();
          clearInterval(interval);
      }
    }
    interval = setInterval(showRemaining, 1000);
    showRemaining();
  }
  window.addEventListener("touchend", touchend, false);
idleLogout();
