
if(typeof altibox==='undefined'){var altibox={};}
if(typeof altibox.api=='undefined'){altibox.api={};altibox.api.base_url='/api';}
if(typeof altibox.internationalization=='undefined'){altibox.internationalization={};}
if(typeof altibox.security=='undefined'){altibox.security={};altibox.security.sessionticket=null;altibox.security.api={};altibox.security.api.urls={};altibox.security.api.urls.login="/altibox-api/authentication/login";}
if(typeof altibox.validators=='undefined'){altibox.validators={};}
altibox.api.utils=(function(){var api_partner_url=altibox.api.base_url+'/menu/partner';function getPartners(callback){$.ajax({url:api_partner_url+"?lang=no",dataType:'json',success:function(data){if(typeof callback=="function")callback(data);},error:function(xhr,options,error){if(typeof callback=="function")callback(null);}});}
return{getPartners:getPartners}})();altibox.auth=(function(){var validate_url=altibox.api.base_url+'/authentication/keepalive';var api_login_url=altibox.api.base_url+'/authentication/login';var api_loginpin_url=altibox.api.base_url+'/authentication/loginpin';var api_ticket_url=altibox.api.base_url+'/authentication/newalias/sendticketmail';function isLoggedIn(callback){var sessionTicket=$.cookie("sessionTicketApi");if(sessionTicket!=null){$.ajax({url:validate_url,type:'GET',dataType:'json',beforeSend:function(xhr){xhr.setRequestHeader("SessionTicket",sessionTicket);},success:function(data){if(data.value){if(typeof callback=="function")callback(sessionTicket);}
else{if(typeof callback=="function")callback(null);}},error:function(xhr,options,error){if(typeof callback=="function")callback(null);handleLoginAjaxError(xhr,options,error);}})}else{callback(null);}}
function getSessionTicketWeb(callback){}
function getSessionTicketApi(username,password,callback){var base64=encodeUser(username,password);$.ajax({url:api_login_url,type:'GET',dataType:'json',beforeSend:function(xhr){xhr.setRequestHeader("Authorization",base64);},success:function(data){if(data!=null){$.cookie("sessionTicketApi",data.identifier);if(typeof callback=="function")callback(data.identifier);}
else{if(typeof callback=="function")callback(null);}},error:function(xhr,options,error){if(typeof callback=="function")callback(null);handleLoginAjaxError(xhr,options,error);}});}
function sendTicketMail(sessionTicket,username,password,redirecturl,callback){$.ajax({url:api_ticket_url,type:'POST',data:{username:username,password:password,redirecturl:redirecturl},dataType:'json',beforeSend:function(xhr){xhr.setRequestHeader("SessionTicket",sessionTicket);},success:function(data){if(typeof callback=="function")callback(data);},error:function(xhr,options,error){if(typeof callback=="function")callback(null);handleLoginAjaxError(xhr,options,error);}})}
function logoutApi(callback){}
function handleLoginAjaxError(xhr,options,error){console.log("Unable to validate sessionTicket - what to do?");console.log("Show some kind of altibox error thingie?");console.log("Or just return a error result?");console.log(xhr,options,error);}
function encodeUser(username,password){var bytes=Crypto.charenc.Binary.stringToBytes(username+":"+password);var base64=Crypto.util.bytesToBase64(bytes);return base64;}
return{logoutApi:logoutApi,isLoggedIn:isLoggedIn,sendTicketMail:sendTicketMail,getSessionTicketWeb:getSessionTicketWeb,getSessionTicketApi:getSessionTicketApi}})()
altibox.commons=function(){function gup(name){name=name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");var regexS="[\\?&]"+name+"=([^&#]*)";var regex=new RegExp(regexS);var results=regex.exec(window.location.href);if(results==null)return"";else return results[1];}
function loadApp(url,container,callback){jQuery=$=$jq;var url_list=url.split("/");var app_name=url_list[url_list.length-2];var path=url.replace("/"+app_name+".min.js","");var map=new altibox.Dictionary();map.put("app",app_name);map.put("path",path);$jq.ajax({url:url,success:function(data){eval(data);var app=window[map.get("app")];if(app==undefined){console.log("Unable to get javascript app object, make sure the app js variable name is "+map.get("app"));callback(null);return;}
if(app.conf==undefined){console.log("Unable to find app configuration.");console.log("Please make sure application object has a .conf attribute.");callback(null);return;}
var css=$jq("<link href='"+map.get("path")+app.conf['css']+"' rel='stylesheet' type='text/css' />");$jq("head").append(css);$jq.ajax({url:map.get("path")+app.conf['markup'],success:function(data){var tstart=data.indexOf("<title>")+7;var tend=data.indexOf("</title>");var title=data.substring(tstart,tend);var start=data.indexOf("<body>")+6;var end=data.indexOf("</body>");var sub=data.substring(start,end);$jq(container.title).text(title);$jq(container.body).append(sub);app.unload=function(){console.log("Not implemented yet.");}
app.init();app.loaded=true;callback({title:title,app:app})},error:function(a,b,c){console.log("Unable to load app markup from "+map.get("path")+app.conf['markup']);console.log(b);console.log(a);callback(null);}});},error:function(a,b,c){console.log("Unable to get altibox app "+app_url);console.log(b);console.log(a);callback(null);}});}
return{gup:gup,loadApp:loadApp};}();altibox.Dictionary=function(){var self={};self.index=0;self.keys=[];PRIVATE={remove:function(key){var ax;while((ax=self.keys.indexOf(key))!=-1){self.keys.splice(ax,1);}}};return{put:function(key,value){self.index+=1;self.keys.push(key);this[key]=value;},set:function(key,value){this[key]=value;},get:function(key){return this[key];},remove:function(key){if(this.containsKey(key)){PRIVATE.remove(key);delete this[key];}},containsKey:function(key){if(this[key]){return true;}
else{return false;}},getIndex:function(){return self.index;},keySet:function(){return self.keys;},size:function(){return self.keys.length;},values:function(){var list=[];for(var i=0;i<self.keys.length;i++){list.push(this[self.keys[i]]);}
return list;}};};if(!Array.prototype.indexOf){Array.prototype.indexOf=function(searchElement){"use strict";if(this===void 0||this===null){throw new TypeError();}
var t=Object(this);var len=t.length>>>0;if(len===0){return-1;}
var n=0;if(arguments.length>0){n=Number(arguments[1]);if(n!==n){n=0;}else if(n!==0&&n!==Infinity&&n!==-Infinity){n=(n>0||-1)*Math.floor(Math.abs(n));}}
if(n>=len){return-1;}
var k=n>=0?n:Math.max(len-Math.abs(n),0);for(;k<len;k++){if(k in t&&t[k]===searchElement){return k;}}
return-1;};}
altibox.internationalization.Locale=(function(){var locales=[];locales.push("*");return{add:function(locale){if(locales.indexOf(locale)==-1){locales.push(locale);}},set:function(locale){this.locale=locale;this.add(locale);},get:function(){if(this.locale=='undefined'||this.locale==null){this.locale="*";}
return this.locale;},getAll:function(){return locales;}};})();altibox.internationalization.Message=function(){var self={};self.messages=new altibox.Dictionary();return{add:function(){var obj={};if(arguments.length<3||arguments.length>4){return null;}
if(arguments.length>2){obj.code=arguments[0];obj.text=arguments[1];obj.locale=arguments[2];}
if(arguments.length<5){obj.args=arguments[3];}
if(self.messages.containsKey(obj.code)){var msgList=self.messages.get(obj.code);msgList.push(obj);self.messages.put(obj.code,msgList);}
else{var msgList=[];msgList.push(obj);if(obj.locale!=="*"){var msg=$.extend({},obj);msg.locale="*";msgList.push(msg);}
self.messages.put(obj.code,msgList);}
return null;},get:function(code){var locale=altibox.internationalization.Locale.get();var msgList=self.messages.get(code);if(msgList!="undefined"||null){for(var i=0;i<msgList.length;i++){if(msgList[i].locale==locale){return msgList[i].text;}}}
return null;},getCodes:function(){return self.messages.keySet();},translate:function(tmpl){var codes=this.getCodes();for(var j=0;j<codes.length;j++){var regex=new RegExp(codes[j],"g");tmpl=tmpl.replace(regex,this.get(codes[j]));}
return tmpl;}};};$.cookie=function(key,value,options){if(arguments.length>1&&String(value)!=="[object Object]"){options=$.extend({},options);if(value===null||value===undefined){options.expires=-1;}
if(typeof options.expires==='number'){var days=options.expires,t=options.expires=new Date();t.setDate(t.getDate()+days);}
value=String(value);return(document.cookie=[encodeURIComponent(key),'=',options.raw?value:encodeURIComponent(value),options.expires?'; expires='+options.expires.toUTCString():'',options.path?'; path='+options.path:'',options.domain?'; domain='+options.domain:'',options.secure?'; secure':''].join(''));}
options=value||{};var result,decode=options.raw?function(s){return s;}:decodeURIComponent;return(result=new RegExp('(?:^|; )'+encodeURIComponent(key)+'=([^;]*)').exec(document.cookie))?decode(result[1]):null;};if(typeof Crypto=="undefined"||!Crypto.util)(function(){var e=window.Crypto={},h=e.util={rotl:function(a,b){return a<<b|a>>>32-b},rotr:function(a,b){return a<<32-b|a>>>b},endian:function(a){if(a.constructor==Number)return h.rotl(a,8)&16711935|h.rotl(a,24)&4278255360;for(var b=0;b<a.length;b++)a[b]=h.endian(a[b]);return a},randomBytes:function(a){for(var b=[];a>0;a--)b.push(Math.floor(Math.random()*256));return b},bytesToWords:function(a){for(var b=[],c=0,d=0;c<a.length;c++,d+=8)b[d>>>5]|=a[c]<<24-
d%32;return b},wordsToBytes:function(a){for(var b=[],c=0;c<a.length*32;c+=8)b.push(a[c>>>5]>>>24-c%32&255);return b},bytesToHex:function(a){for(var b=[],c=0;c<a.length;c++){b.push((a[c]>>>4).toString(16));b.push((a[c]&15).toString(16))}return b.join("")},hexToBytes:function(a){for(var b=[],c=0;c<a.length;c+=2)b.push(parseInt(a.substr(c,2),16));return b},bytesToBase64:function(a){if(typeof btoa=="function")return btoa(f.bytesToString(a));for(var b=[],c=0;c<a.length;c+=3)for(var d=a[c]<<16|a[c+1]<<8|a[c+2],g=0;g<4;g++)c*8+g*6<=a.length*8?b.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(d>>>6*(3-g)&63)):b.push("=");return b.join("")},base64ToBytes:function(a){if(typeof atob=="function")return f.stringToBytes(atob(a));a=a.replace(/[^A-Z0-9+\/]/ig,"");for(var b=[],c=0,d=0;c<a.length;d=++c%4)d!=0&&b.push(("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c-1))&Math.pow(2,-2*d+8)-1)<<d*2|"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c))>>>6-d*2);return b}};e=e.charenc={};e.UTF8={stringToBytes:function(a){return f.stringToBytes(unescape(encodeURIComponent(a)))},bytesToString:function(a){return decodeURIComponent(escape(f.bytesToString(a)))}};var f=e.Binary={stringToBytes:function(a){for(var b=[],c=0;c<a.length;c++)b.push(a.charCodeAt(c)&255);return b},bytesToString:function(a){for(var b=[],c=0;c<a.length;c++)b.push(String.fromCharCode(a[c]));return b.join("")}}})();if($.browser.mozilla||$.browser.opera){document.removeEventListener("DOMContentLoaded",$.ready,false);document.addEventListener("DOMContentLoaded",function(){$.ready();},false);}
$.event.remove(window,"load",$.ready);$.event.add(window,"load",function(){$.ready();});$.extend({includeStates:{},include:function(url,callback,dependency){if(typeof callback!='function'&&!dependency){dependency=callback;callback=null;}
url=url.replace('\n','');$.includeStates[url]=false;var script=document.createElement('script');script.type='text/javascript';script.onload=function(){$.includeStates[url]=true;if(callback)
callback.call(script);};script.onreadystatechange=function(){if(this.readyState!="complete"&&this.readyState!="loaded")return;$.includeStates[url]=true;if(callback)
callback.call(script);};script.src=url;if(dependency){if(dependency.constructor!=Array)
dependency=[dependency];setTimeout(function(){var valid=true;$.each(dependency,function(k,v){if(!v()){valid=false;return false;}})
if(valid)
document.getElementsByTagName('head')[0].appendChild(script);else
setTimeout(arguments.callee,10);},10);}
else
document.getElementsByTagName('head')[0].appendChild(script);return function(){return $.includeStates[url];}},readyOld:$.ready,ready:function(){if($.isReady)return;imReady=true;$.each($.includeStates,function(url,state){if(!state)
return imReady=false;});if(imReady){$.readyOld.apply($,arguments);}else{setTimeout(arguments.callee,10);}}});altibox.security.authentication=(function(){return{AuthHandler:function(){return{login:function(username,password,callback){var bytes=Crypto.charenc.Binary.stringToBytes(username+":"+password);var base64=Crypto.util.bytesToBase64(bytes);$.ajax({url:altibox.security.api.urls.login,type:'GET',dataType:'json','beforeSend':function(xhr){xhr.setRequestHeader("Authorization",base64);},error:function(xhr,ajaxOptions,thrownError){console.log(xhr);console.log(ajaxOptions);console.log(thrownError);if(typeof callback=="function"){callback(false);}},success:function(auth){if(auth==null){if(typeof callback=="function"){callback(false);}
else
{return false;}}
altibox.security.sessionticket=auth.identifier;$.cookie('sessionTicket',auth.identifier,{expires:new Date(new Date().getTime()+1800000)});$.cookie("logedin",true,{expires:new Date(new Date().getTime()+1800000)});$.cookie("loginExpire",new Date(new Date().getTime()+1800000),{expires:new Date(new Date().getTime()+1800000)});if(typeof callback=="function"){callback(auth.identifier);}
return null;}});},getSoftwareLicenses:function(callback){if(test){avapitest.getSoftwareLicenses(callback)}
else{$.ajax({url:altibox.apps.antivirus.urls.getSoftwareLicenses,data:"customerNbr="+a_customerNumber,type:'GET',dataType:'json',async:false,'beforeSend':function(xhr){xhr.setRequestHeader("SessionTicket",$.cookie('sessionTicket'));},success:function(data){callback(data);}});}}};}};})();altibox.user=(function(){var customerName="";var username="";var newpassword="";var sessionTicket="";var availableUsernames="";var assetId="";var accountId="";function setSessionTicket(st){sessionTicket=st;}
function setAvailableUsernames(au){availableUsernames=au;}
function setCustomerName(cn){customerName=cn;}
function setNewPassword(p){newpassword=p;}
function setUsername(un){username=un;}
function setAssetId(aid){assetId=aid;}
function setAccountId(acid){accountId=acid;}
function setUser(json){setCustomerName(json.customerName);setUsername(json.username);setAvailableUsernames(json.availableUsernames);setAssetId(json.assetId);setAccountId(json.accountId);$.cookie("user",toString());return self;}
function getNewPassword(){return newpassword;}
function getCustomerName(){return customerName;}
function getUsername(){return userName;}
function getSessionTicket(){return sessionTicket;}
function getAvailableUsernames(){return availableUsernames;}
function toJSON(){return JSON.parse('{"customerName":"'+customerName+'", "username":"'+username+'", "availableUsernames":"'+availableUsernames+'", "newpassword":"'+newpassword+'", "assetId":"'+assetId+'", "accountId":"'+accountId+'", "sessionTicket":"'+sessionTicket+'"}');}
function toString(){return JSON.stringify(toJSON());}
return{setSessionTicket:setSessionTicket,setCustomerName:setCustomerName,setNewPassword:setNewPassword,setAccountId:setAccountId,setUsername:setUsername,setAssetId:setAssetId,toString:toString,setUser:setUser,toJSON:toJSON}})();altibox.validators.validatePassword=function(pw,options){var o={lower:0,upper:0,alpha:0,numeric:0,special:0,length:[0,Infinity],custom:[],badWords:[],badSequenceLength:0,noQwertySequences:false,noSequential:false};for(var property in options)
o[property]=options[property];var re={lower:/[a-z]/g,upper:/[A-Z]/g,alpha:/[A-Z]/gi,numeric:/[0-9]/g,special:/[\W_]/g},rule,i;if(pw.length<o.length[0]||pw.length>o.length[1])
return false;for(rule in re){if((pw.match(re[rule])||[]).length<o[rule])
return false;}
for(i=0;i<o.badWords.length;i++){if(pw.toLowerCase().indexOf(o.badWords[i].toLowerCase())>-1)
return false;}
if(o.noSequential&&/([\S\s])\1/.test(pw))
return false;if(o.badSequenceLength){var lower="abcdefghijklmnopqrstuvwxyz",upper=lower.toUpperCase(),numbers="0123456789",qwerty="qwertyuiopasdfghjklzxcvbnm",start=o.badSequenceLength-1,seq="_"+pw.slice(0,start);for(i=start;i<pw.length;i++){seq=seq.slice(1)+pw.charAt(i);if(lower.indexOf(seq)>-1||upper.indexOf(seq)>-1||numbers.indexOf(seq)>-1||(o.noQwertySequences&&qwerty.indexOf(seq)>-1)){return false;}}}
for(i=0;i<o.custom.length;i++){rule=o.custom[i];if(rule instanceof RegExp){if(!rule.test(pw))
return false;}else if(rule instanceof Function){if(!rule(pw))
return false;}}
return true;}
altibox.validators.email=function(email){var re=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;return re.test(email);}
altibox.validators.userpassword=function(password){var valid=altibox.validators.validatePassword(password,{length:[8,Infinity],alpha:3,numeric:2});return valid;}
