var auth = {
  servicePath: "/service-proxy/",
  loggedIn: false,
  loginFailed: false,
  ipAuth: false,
  realm: null,
  displayName: null,
  startPage: null,
  styleCss: null,
  indexCss: null,
    
  check: function (successCb, failCb, followWithIP) {
    var params = {"command":"auth", "action" : "check"};
    var req = new pzHttpRequest(this.servicePath);
    var context = this;    
    req.get(params, function (data) {
        if (Element_getTextContent(data.getElementsByTagName("status")[0]) == "OK") {
            if (Element_getTextContent(data.getElementsByTagName("type")[0]) == "credentials") {
              context.loggedIn = true;
              context.ipAuth = false;
            } else if (Element_getTextContent(data.getElementsByTagName("type")[0]) == "ip") {
              context.loggedIn = false;
              context.ipAuth = true;
            }            
            context.realm = Element_getTextContent(data.getElementsByTagName("realm")[0]);
            context.displayName = Element_getTextContent(data.getElementsByTagName("displayName")[0]);            
            context.iconUrl = Element_getTextContent(data.getElementsByTagName("iconUrl")[0]);
            context.proxyPattern = Element_getTextContent(data.getElementsByTagName("proxyPattern")[0]);
            var realmAttributes = data.getElementsByTagName("realmAttributes");            
            if (realmAttributes.length) {
                var startPage = realmAttributes[0].getElementsByTagName("startPage");
                if (startPage.length) context.startPage = Element_getTextContent(startPage[0]);                
                var styleCss = realmAttributes[0].getElementsByTagName("styleCssUrl");
                if (styleCss.length) context.styleCss = Element_getTextContent(styleCss[0]);
                var indexCss = realmAttributes[0].getElementsByTagName("indexCssUrl");
                if (indexCss.length) context.indexCss = Element_getTextContent(indexCss[0]);
            }
            var proxyUrl = data.getElementsByTagName("proxyUrl");
            if (proxyUrl.length)
              context.proxyUrl = Element_getTextContent(proxyUrl[0]);
            var ral = data.getElementsByTagName("relaisAccessLink");
            if (ral.length)
              context.relaisAccessLink = Element_getTextContent(ral[0]); 
            if (typeof successCb == "function") successCb(context);
        } else {
            if (typeof followWithIP != "undefined" && followWithIP === false) {
              if (typeof failCb == "function") failCb(context);
            } else {          
              context.ipenticate(successCb, failCb);
            }
        }
    });
  },
  ipenticate: function (successCb, failCb) {
    var params = {"command":"auth", "action" : "ipauth"};
    var req = new pzHttpRequest(this.servicePath);
    var context = this;
    req.get(params, function (data) {
        if (Element_getTextContent(data.getElementsByTagName("status")[0]) == "OK") {            
            context.loggedIn = false;
            context.ipAuth = true;
            context.realm = Element_getTextContent(data.getElementsByTagName("realm")[0]);
            context.displayName = Element_getTextContent(data.getElementsByTagName("displayName")[0]);
            context.iconUrl = Element_getTextContent(data.getElementsByTagName("iconUrl")[0]);
            context.proxyPattern = Element_getTextContent(data.getElementsByTagName("proxyPattern")[0]);
            var realmAttributes = data.getElementsByTagName("realmAttributes");
            if (realmAttributes.length) {                
                var startPage = realmAttributes[0].getElementsByTagName("startPage");
                if (startPage.length) context.startPage = Element_getTextContent(startPage[0]);
                var styleCss = realmAttributes[0].getElementsByTagName("styleCssUrl");
                if (styleCss.length) context.styleCss = Element_getTextContent(styleCss[0]);
                var indexCss = realmAttributes[0].getElementsByTagName("indexCssUrl");
                if (indexCss.length) context.indexCss = Element_getTextContent(indexCss[0]);
            }
            var proxyUrl = data.getElementsByTagName("proxyUrl");
            if (proxyUrl.length)
              context.proxyUrl = Element_getTextContent(proxyUrl[0]);
            var ral = data.getElementsByTagName("relaisAccessLink");
            if (ral.length)
              context.relaisAccessLink = Element_getTextContent(ral[0]);
            if (typeof successCb == "function") successCb(context);
        } else {
            context.loggedIn = false;
            context.ipAuth = false;
            context.realm = null;
            context.displayName = null;
            context.iconUrl = null;
            context.proxyPattern = null;
            context.proxyUrl = null;
            context.relaisAccessLink = null;
            if (typeof failCb == "function") failCb(context);
        }
    });
  },
  login: function(cred, successCb, failCb, followWithIP) {
    var params = {
        "command":"auth", "action" : "login",
        "username": cred.username, 
        "password": cred.password
    };
    var req = new pzHttpRequest(this.servicePath);
    var context = this;
    req.get(params, function (data) {
        if (Element_getTextContent(data.getElementsByTagName("status")[0]) == "OK") {
            context.loginFailed = false;
            context.loggedIn = true;
            context.ipAuth = false;
            context.realm = Element_getTextContent(data.getElementsByTagName("realm")[0]);
            context.displayName = Element_getTextContent(data.getElementsByTagName("displayName")[0]);
            context.iconUrl = Element_getTextContent(data.getElementsByTagName("iconUrl")[0]);
            context.proxyPattern = Element_getTextContent(data.getElementsByTagName("proxyPattern")[0]);
            var proxyUrl = data.getElementsByTagName("proxyUrl");
            if (proxyUrl.length)
              context.proxyUrl = Element_getTextContent(proxyUrl[0]);
            
            var realmAttributes = data.getElementsByTagName("realmAttributes");            
            if (realmAttributes.length) {                
                var startPage = realmAttributes[0].getElementsByTagName("startPage");                
                if (startPage.length) context.startPage = Element_getTextContent(startPage[0]);                
                var styleCss = realmAttributes[0].getElementsByTagName("styleCssUrl");
                if (styleCss.length) context.styleCss = Element_getTextContent(styleCss[0]);
                var indexCss = realmAttributes[0].getElementsByTagName("indexCssUrl");
                if (indexCss.length) context.indexCss = Element_getTextContent(indexCss[0]);
            }
            var ral = data.getElementsByTagName("relaisAccessLink");
            if (ral.length)
              context.relaisAccessLink = Element_getTextContent(ral[0]);
            if (typeof successCb == "function") successCb(context);
        } else {
            context.loginFailed = true;
            if (typeof followWithIP != "undefined" && followWithIP === false) {
              if (typeof failCb == "function") failCb(context);
            } else {          
              context.ipenticate(successCb, failCb);
            }
        }
    });
  },
  logOut: function(successCb, failCb, followWithIP) {
    var params = {"command":"auth", "action" : "logout"};
    var req = new pzHttpRequest(this.servicePath);
    var context = this;
    req.get(params, function (data) {
        if (Element_getTextContent(data.getElementsByTagName("status")[0]) == "OK") {
            context.loggedIn = false;
            context.ipAuth = false;
            context.realm = null;
            context.displayName = null;
            context.iconUrl = null;
            context.proxyPattern = null;
            context.proxyUrl = null;
            context.relaisAccessLink = null;
            context.startPage = null;
            context.styleCss = null;
            context.indexCss = null;
            if (typeof followWithIP != "undefined" && followWithIP === false) {
              if (typeof successCb == "function") successCb(context);
            } else {          
              context.ipenticate(successCb, failCb);
            }
        } else {
            if (typeof failCb == "function") failCb(context);
        }
    });
  }
}
