if (!window.DB) {
	DB = {
		client_iframe: 		'db_rem_xdrfrm',
	  	server_iframe: 		'db_serv_xdrfrm',
	  	visible_wrapper: 	'db_xdr_login',
	  	login_host: 		'https://konto.dagbladet.no/api/xdr/dev/#',
	  	utils_host: 		'https://konto.dagbladet.no/?op=',
	  	defaultLoadingHTML: '<img src="https://konto.dagbladet.no/gfx/loading.gif"/>',
	  	default_width: 		368,
	  	default_height: 	230,
	  	teardown: 			1, 
	  	key: 				0,
	  	receiver: 			'',
	  	host: 				'',
	  	parsedPayload: 		'',
	  	teardown: 			false, 
	  	type: 				'',
	  	loginDelayCookie: 	'DB_LDCv04',
	  	profileUrl:			'http://www.dagbladet.no/folk/',
	  	userId: 			0,
	  	usePopup: 			false,
	  	
	  	onReceiverLoaded: function(payload)
   	 	{
			if (payload) {
	   	 		var parts = DB.Utils.parsePayload(payload);
   		 		var func;
	   	 		
	   	 		if (parts['fname']) {
	   	 			func = parts['fname'];
	   	 			
	   	 			var namespace = 'DB.Client';
	   	 			if (parts['namespace']) {
	   	 				namespace = parts['namespace'];	
	   	 			}
	   	 			
					DB.Utils.callFunction(func, namespace);
	   	 		}
	   	 		if (DB.teardown) {
	   	 			
	   	 			if (navigator.appName != 'Opera') {
	   	 				DB.Utils.cleanChannel(DB.type)
	   	 			} 
	   	 		}
			}
   	 	}
	};
}

if (!DB.Utils) {
	
	DB.Utils = {
		
		call: function(type, target, visible, teardown)
		{
			if (navigator.appName != 'Opera') {
				DB.Utils.cleanChannel(type);
			}
			if (type == 'server') {
				if (visible) {
					teardown = false;
					DB.Utils.createVisibleChannel(target, DB.client_iframe, DB.default_width, DB.default_height, DB.visible_wrapper);
				} else {
					DB.Utils.createChannel(target, DB.client_iframe);
				}
			} 
			
			else if (type == 'client') {
				DB.Utils.createChannel(target, DB.server_iframe);	
			}
			
			if(teardown) {
				DB.teardown = true;
				DB.type = type;
			} else{
				DB.teardown = false;
			}
		},
		
		createVisibleChannel: function (url, domid, width, height, domparent)
		{
			var cloc = document.location.href;
		
			if (DB.Utils.usePopup) {
				jQuery.facebox('<p id="xdr_iframe_wrapper"></p>');	
			}
			var atts =  { 
          			id: domid,
          			scrolling: 'no',
          			src: url,
          			marginheight: 0, marginwidth: 0, frameBorder: 0, border: 0,
          			style: 'width:'+width+'px; height:'+height+'px; border:0px;'
        	};
			var iframe = $('<iframe></iframe>').attr(atts);
			
			if (DB.Utils.usePopup) {
				$('#xdr_iframe_wrapper').append(iframe);
			}	else {
				$('#'+DB.visible_wrapper).css({'width' : width, 'padding-bottom' : '20px', 'border-bottom' : '2px solid #666666'});
				$('#'+domparent).html('');	
				$('#'+domparent).append(iframe);
				$('#'+domparent).append('<div id="xdr_ifrm_forgotlink"><a href="http://konto.dagbladet.no?op=LostPassword&target='+DB.Utils.urlEncode(document.location.href)+'">Glemt passord</a></div>');
				$('#'+domparent).append('<div id="xdr_ifrm_reglink"><a href="http://konto.dagbladet.no?op=RegisterUser&target='+DB.Utils.urlEncode(document.location.href)+'">Registrer deg</a></div>');
 			}
		},

		createChannel: function(url, domid)
		{
			var atts =  { 
          			id: domid,
          			src: url,
          			scrolling: 'no',
          			marginheight: 0, marginwidth: 0, frameBorder: 0,
          			border: 0, width:0, height: 0,
          			style: 'width:0px; height:0px; border:0px;'
        	};

			var iframe = $('<iframe></iframe>').attr(atts);
			$('body').append(iframe);
		}, 

		cleanChannel: function(type) 
		{
			if (type == 'server') {
				
				$('#'+DB.visible_wrapper).html('');
				$('#'+DB.visible_wrapper).css({'padding-bottom' : '0px', 'border-bottom' : '0px'});	
				
				$('#'+DB.client_iframe).remove();	
			} else if (type == 'client') {
				$('#'+DB.server_iframe).remove();
			}
		}, 
		
		getPayload: function()
		{
			var pathname = document.URL;
			var hashIndex = pathname.indexOf('#');
	      	var payLoad;
	      	var packet_string;
	      	var func = null;
			
	      	if(hashIndex > 0) {
	        	payLoad = pathname.substring(hashIndex + 1);
	        	
	        	var assArray = [];
	        	var parts = payLoad.split("$");

				for(var i=0; i<parts.length; i++) {
					part = parts[i];
					keypair = part.split("=");
					assArray[keypair[0]] = keypair[1];
				}	
	      	}
	      	return assArray; 
		},
		
		parsePayload: function(payload)
		{
		    var assArray = [];

			if (payload.indexOf('$') > 0) {
	        	var parts = payload.split("$");
	
				for(var i=0; i<parts.length; i++) {
					 
					var part = parts[i];
					var keypair = part.split("=");
					assArray[keypair[0]] = keypair[1];
				}	
			} else {
				var keypair = payload.split("=");
				assArray[keypair[0]] = keypair[1];
			}
			DB.parsedPayload = assArray;
	      	return assArray; 
		},
		
		callFunction: function(fname, ns, args)
		{
			var context = window;

			if (ns) {
				var namespaces = ns.split(".");
		  		for(var i = 0; i < namespaces.length; i++) {
		    		context = context[namespaces[i]];
		  		}	
			} 
			
			if (args) {
				context[fname].apply(this, args);	
			} else {
		  		context[fname].call(this);
			}		  	
		  	return true;
		},
		
		createLoader: function(wrappingElement)
		{
			var node = $(wrappingElement).append(DB.defaultLoadingHTML);
			return node;
		},
		 
		removeLoader: function(node)
		{
			node.html('');
		}, 
		
		setCookie: function(cookieName, cookieValue, options)
		{
			
			var exdate = new Date();
			var cookieString = cookieName + "=" +escape(cookieValue);
			var setExpires = false;
			
			if (options) {
				if (options.days) {
					xdate.setDate(exdate.getDate()+options.days);
					setExpires = true;
				}
				if (options.minutes) {
					exdate.setMinutes(exdate.getMinutes()+options.minutes);
					setExpires = true;
				}
				if (options.seconds) {
					exdate.setSeconds(exdate.getSeconds()+options.seconds);
					setExpires = true;
				}
				if (setExpires == true) {
					cookieString = cookieString + '; expires='+exdate.toUTCString();
				}
				if (options.domain) {
					cookieString = cookieString + '; domain='+options.domain;
				}
				if (options.path) {
					cookieString = cookieString + '; path='+options.path;
				} else{
					cookieString = cookieString + '; path=/';
				}
			}
			document.cookie = cookieString;
		},
		
		delCookie: function(cookieName, options)
		{
			var exdate = new Date();
			exdate.setDate(exdate.getDate()-10);
			var cookieString = cookieName+'=""';
			cookieString = cookieString + '; expires='+exdate.toUTCString();
			
			if (options) {
				if (options.domain) {
					cookieString = cookieString + '; domain='+options.domain;
				}
				
				if (options.path) {
					cookieString = cookieString + '; path='+options.path;
				} else{
					cookieString = cookieString + '; path=/';
				}
			}
			document.cookie = cookieString;
		}, 
		
		getCookie: function(cookieName)
		{
			if (document.cookie.length > 0) {
				var c_start = document.cookie.indexOf(cookieName + "=");
			  
			  	if (c_start != -1) {
				    c_start = c_start + cookieName.length+1;
				    var c_end = document.cookie.indexOf(";", c_start);
				    
				    if (c_end == -1) {
				    	c_end = document.cookie.length;
				    }
				    return unescape(document.cookie.substring(c_start,c_end));
			    }
			}
			return "";
		},
		
		getCookieAsArray: function(cookieName)
		{
			var cookie = DB.Utils.getCookie(cookieName);
			return DB.Utils.splitCookie(cookie);
		}, 
		
		splitCookie: function(cookie) {
			var cookieparts = [];
			
			if (cookie) {
				if (cookie.indexOf('&') > 0) {
		        	var parts = cookie.split("&");
		
					for(var i=0; i < parts.length; i++) {
						var key, value;
						
						if (i % 2 == 0) {
							key = parts[i];
							value = parts[i+1];
							cookieparts[key] = value;
						} 				 	
					}	
				}
				return cookieparts;
			}	
			return [];
		},
		
		getMasterDomain: function()
		{
			var domain = DB.host;
 			if (domain[0] == '.') {domain = domain.substring(1);}
 			
 			var parts = domain.split('.');
 			
 			if (parts[0] == 'www' && parts[1].length > 2) {
 				domain = domain.substring(4);
 			} else if (parts[0].length <= 2 && parts[0] != 'www') {
 				domain = 'www.'+domain;
 			}
 			return domain;
		}, 
		
		
		validateCookie: function(cookie)
		{
			var valid = true;
			var c = null;

			if (cookie) {
				c = DB.Utils.splitCookie(cookie);
			} else{
				c = DB.Utils.getCookieAsArray('DBServices'); 
			}
			
			if (c) {
				if (c['userid'] <= 1000000000) valid = false;
				if (!c['name']) valid = false;
				if (!c['ip']) valid = false;
				if (!c['hash']) valid = false;
				if (!c['authuser']) valid = false;
				if (c['serviceid'] != 101) valid = false;
				if (c['created'] < 1220000000) valid = false;
			}
			
			return valid;
		}, 
		
		getCurrentUrl: function()
		{
			var curloc = document.location.href;
			var parts = curloc.split("#");
			return parts[0];	
		}, 
		
		getRandomNumber: function()
		{
			return Math.floor(Math.random()*10000000000001);
		},
		
		urlEncode: function(url)                   
		{                   
		  var eis=escape(url);
		  eis=eis.replace("+", "%2B");
		  eis=eis.replace("/", "%2F");
		  return eis;
		}
	}
}