var $dgi=function(){
var _restHost="http://services.dgi.dk";
var _scriptHost="http://code.dgi.dk";
var _newId=function(l){
l=l||5;
var id="";
var p="_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
for(var i=0;i<l;i++)id+=p.charAt(Math.floor(Math.random()*p.length));
return id;};
_getRestUrl=function(restHost,url,params){
var separator="?";
if(url.indexOf("?")>0)separator="&";
return restHost+url+separator+params;};
return{
version:"1.0",
getRest:function(url,callback){
var func=callback;
if(typeof callback=="function"){
var id=_newId(5);
window[id]=callback;
func=id;}
var e=document.createElement("script");
e.src=_getRestUrl(_restHost,url,"view=json&callback="+func);
e.type="text/javascript";
document.body.appendChild(e);},
postRest:function(url,parameters,callback){
var payload="";
if(parameters){
for(var item in parameters){
payload+=(payload?"&":"")+item+"="+encodeURI(parameters[item]);}}
var request=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Msxml2.XMLHTTP");
request.open("POST",_getRestUrl(_restHost,url,"?view=json"),true);
request.onreadystatechange=function(){
if(request.readyState==4){
if(request.status==200){
var object=null;
try{
object=eval("("+request.responseText+")");}catch(err){
object=request.responseText;}
callback(object);}else{
callback({code:request.status,message:request.statusText});}}};
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
request.setRequestHeader("Content-length",payload.length);
request.setRequestHeader("Connection","close");
request.send(payload);},
setScriptHost:function(host){
_scriptHost=host;},
setRestHost:function(host){
_restHost=host;},
getRestHost:function(){
return _restHost;},
ensurejQuery:function(message){
if(!window.$)throw new Error(message);},
ensurejQueryUI:function(){
if(!jQuery.ui)throw new Error("jQuery UI skal være inkluderet på siden");},
Widgets:{}}}();
$dgi.Adresse={};
$dgi.Widgets.adresseLookUp=function(id,konfiguration){
$dgi.ensurejQuery("$dgi.Widgets.adresseLookUp virker kun hvis jQuery UI er inkluderet på siden");
var $inputfield=$(id),
config={
maxrows:20,
minlength:1};
$.extend(config,konfiguration);
$inputfield.autocomplete({
source:function(request,response){
$.ajax({
url:$dgi.getRestHost()+"/adresse/vejnavn/"+request.term,
dataType:"jsonp",
data:{
view:"json",
maxrows:config.maxrows},
success:function(data){
response($.map(data,function(item){
return{
label:item.Vejnavn,
value:item.Vejnavn}}))}})},
minLength:config.minlength,
select:function(event,ui){}});};
$dgi.Widgets.postnrLookup=function(id,konfiguration){
$dgi.ensurejQuery("$dgi.Widgets.adresseLookUp virker kun hvis jQuery er inkluderet på siden");
var config={
match:function(bynavn){},
nomatch:function(){}};
$.extend(config,konfiguration);
var onKeyUp=function(){
var isZip=/^\d{4}$/,
query=$(this).val();
if(isZip.test(query)){
$dgi.getRest("/Adresse/Postnummer/"+query,function(data){
if(data&&typeof(data.Bynavn)!="undefined")config.match(data.Bynavn);
else
config.nomatch();});}};
$(id).keyup(onKeyUp).change(onKeyUp);};

$dgi.Arrangement={};
$dgi.Arrangement.get=function(nummer,callback){
$dgi.getRest("/Arrangement/"+nummer,callback);};
$dgi.Widgets.arrangementLookup=function(id,konfiguration){
var num_re=new RegExp("\d","gi");
$dgi.ensurejQueryUI();
var $inputfield=$(id),
config={
maxrows:20,
minlength:4};
$.extend(config,konfiguration);
$inputfield.autocomplete({
source:function(request,response){
$.ajax({
url:$dgi.getRestHost()+"/arrangement/query/"+request.term.replace(" ",""),
dataType:"jsonp",
data:{
view:"json",
maxrows:config.maxrows},
success:function(data){
response($.map(data,function(item){
return{
value:item.Id,
label:item.DisplayName}}))}})},
minLength:config.minlength});
return $inputfield;};
$dgi.Facebook={};
$dgi.Facebook.isConnected=function(fbid,callback){
if(!fbid)callback(false);
var ressource="/Facebook/Connections/"+fbid;
$dgi.getRest(ressource,function(result){
callback(result.Code?false:true);});};
$dgi.Facebook.addConnection=function(fbid,callback){
if(!fbid)return;
var ressource="/Facebook/Connections/"+fbid;
$dgi.postRest(ressource,null,callback);};
$dgi.feed={};
$dgi.feed.get=function(url,antal,callback){
$dgi.getRest("/proxy/rss/?url="+escape(url)+"&hits="+antal,callback);};

$dgi.Mimer={};
$dgi.Mimer.opretPerson=function(){
var returnvalue=window.showModalDialog("/mimer/adresse/ret.htm?");
if(returnvalue){
var startIndex=returnvalue.indexOf("id=");
var personIdLength=8;
if(startIndex>-1)startIndex+=4;
var personId=returnvalue.substring(startIndex,startIndex+personIdLength)
return personId;}
return null;};
$dgi.Mimer.translateSearchPattern=function(input){
return input.replace(/\*/g,"-").replace(/\?/g,"_");};
$dgi.Person={};
$dgi.Person.put=function(person,callback){
if(!person.fornavn||!person.efternavn||!person.email||!person.password){
callback({Code:400,Message:"Person skal indeholde både fornavn,efternavn,email og password"});
return;}
$dgi.postRest("/Person",person,callback);};
$dgi.Person.lookupPhone=function(nummer,callback){
$dgi.getRest("/Person/Telefon/"+nummer,callback);};
$dgi.Widgets.telefonTunnel=function(id,konfiguration){
$dgi.ensurejQueryUI();
var config=$.extend({
match:function(){},
select:function(id){},
nomatch:function(){}},konfiguration);
var $inp=$(id),
phonere=/^\d{8}$/;
$inp.autocomplete({
source:function(request,response){
config.match();
$dgi.Person.lookupPhone(request.term,function(data){
if(data.length==0){
config.nomatch();}
else if(data.length==1){
config.select(data[0].Id);}
else{
response($.map(data,function(item){
return{
label:item.DisplayName,
value:request.term,
id:item.Id}}));}});},
search:function(event,ui){
if(!phonere.test(event.target.value)){
config.nomatch();
return false;}},
minLength:8,delay:0,
select:function(event,ui){
config.select(ui.item.id);}});};
$dgi.Person.get=function(id,callback){
if(isNaN(id)){
callback({code:400,message:"Ugyldigt ID"});
return;}
$dgi.getRest("/person/"+id,callback);};
$dgi.Widgets.personSoeg=function(id,callback){
$dgi.ensurejQueryUI();
callback=callback||function(id){alert(id);};
var $inp=$(id),
query_re=/[a-zæøå\?\*]{1,6}[\d\?\*]{4}|[a-zæøå\?\*]{4,6}\d{0,2}\*/gi;
$inp.autocomplete({
source:function(request,response){
$dgi.Person.soeg($dgi.Mimer.translateSearchPattern(request.term),function(data){
data.unshift({DisplayName:"Opret ny ...",Id:-1});
response($.map(data,function(item){
return{
label:item.DisplayName,
value:item.Id}}));});},
search:function(event,ui){
return query_re.test(event.target.value);},
minLength:3,
select:function(event,ui){
if(ui.item.value==-1){
var newid=$dgi.Mimer.opretPerson();
if(newid)$(event.target).val(newid).trigger('keyup');
return false;}},
focus:function(event,ui){
if(ui.item.value==-1)return false;},
delay:0});};
$dgi.Person.soeg=function(query,callback){
$dgi.getRest("/Person/query/"+query,callback);};

$dgi.Udvalg={};
$dgi.Udvalg.get=function(nummer,callback){
$dgi.getRest("/udvalg/"+nummer,callback);};
$dgi.Request={};
$dgi.Request.queryString=function(key){
var query=window.location.search.substring(1);
var keyValues=query.split("&");
for(i=0;i<keyValues.length;i++){
var ft=keyValues[i].split("=");
if(ft[0].toLowerCase()==key.toLowerCase()){
return ft[1];}}};
$dgi.Date=(function(){
var date_re=new RegExp("\\/Date\\((\\-?\\d+)\\)\\/");
return{
parseJSON:function(json){
return date_re.test(json)?eval(json.replace(date_re,"new Date($1)")):null;}}})();
$dgi.Util={};
$dgi.Util.isNumber=function(input){
if(input==undefined)return false;
input=input.replace(/\s/g,"");
return(input-0)==input&&input.length>0;}
$dgi.Widgets.udvalg_find=function(containerid){
with(document.getElementById(containerid)){
eval('var findButton_onclick=function(){\
$dgi.Udvalg.get(document.getElementById(containerid+"inpNummer").value,function(res){\
var el=document.getElementById(containerid+"resultat");\
if(res.Code){\
el.innerHTML=res.Message;}else{\
el.innerHTML=res.Navn;}});};\
');
with(appendChild(document.createElement("input"))){
type="text";
id=containerid+"inpNummer";}
with(appendChild(document.createElement("button"))){
onclick=findButton_onclick;
id=containerid+"findButton";
appendChild(document.createTextNode("Find udvalg"));}
with(appendChild(document.createElement("div"))){
id=containerid+"resultat";}}};

