﻿//
//  Script dp.js
//
//  (C) 2006-2010 MHGS. All rights reserved
//                http://www.MHGSoft.de
//
//==========================================================================



var ajax;
var fns;
var isGadget=false;
var finden;


if (window.location.protocol=='x-gadget:') {
  System.Gadget.Flyout.file = "flyout.html";
  MyAlert=function(s){
     Meldung.innerText=s;
     Meldung.style.visibility='visible';
   }; }else {
  MyAlert=alert;
};




function WriteCellR(arow,atext,al){
    var acell = document.createElement("td");
    arow.appendChild(acell);
acell.style.paddingRight='8px';
if (al) {acell.style.textAlign=al;};
     var TDtext = document.createTextNode(atext);
     acell.appendChild(TDtext);
}

function WriteCell(ID,atext){
       var TD = document.getElementById(ID);
      TD.removeChild(TD.firstChild);
      var TDtext = document.createTextNode(atext);
       TD.appendChild(TDtext);
}

function SetCursor(s){
 document.getElementsByTagName("body")[0].style.cursor=s;
}

var treffer=0;

function ErgLoeschenR(atable){
var atable=document.getElementById(atable);
    atable.style.display='none';
   for (i=treffer-1;i>=0;i--){
     atable.tBodies[0].deleteRow(i);}
   WriteCell("Treffer"," ");
   WriteCell("Begriff"," ");
}

function ErgLoeschen(){
     WriteCell("dname","");
     WriteCell("Keyword","");
     WriteCell("VM","");
     WriteCell("VR","");
     WriteCell("RET","");
}


function stuff(s){
var n=s.length;
   switch (n){
   case 1: return '000'+s;
           break;
   case 2: return '00'+s;
           break;
   case 3: return '0'+s;
           break;
   default: return s;
  }
}


function ValStr(s){
//  if (s.indexOf("XX")<0){
  return s.match(/[A-FXa-fx0-9]{4}/);
//  }else{s=s.toLowerCase();
//  return (s=="31xx") || (s=="50xx") || (s=="60xx")};
}


var notfound="<n.a.>";

function Suchen(){

var gr=stuff(document.Dp.Group.value).toUpperCase();
var el=stuff(document.Dp.Element.value).toUpperCase();
if ((gr=="") || (el=="")){
     MyAlert("Please enter group and element.\nBitte geben Sie Group und Element ein.");
     return;	
}
if (!ValStr(gr) || !ValStr(el)){
     MyAlert("Wrong syntax.\nFalsche Syntax.");
     return;	
}

var Anzahl=fns.length;
  for (var i=0;i<Anzahl;i++){
     if (fns[i].getElementsByTagName("group")[0].firstChild.nodeValue.toUpperCase()==gr){
      if (fns[i].getElementsByTagName("element")[0].firstChild.nodeValue.toUpperCase()==el){
       WriteCell("dname",fns[i].getElementsByTagName("name")[0].firstChild.nodeValue);
       WriteCell("VM",fns[i].getElementsByTagName("VM")[0].firstChild.nodeValue);
       if (fns[i].getElementsByTagName("VR")[0].firstChild){
       WriteCell("VR",fns[i].getElementsByTagName("VR")[0].firstChild.nodeValue);}
       if (fns[i].getElementsByTagName("RET")[0]) 
         {s='Retired';} else
       if (fns[i].getElementsByTagName("NDE")[0]) 
         {s='DICONDE';} else
         {s="";}
       WriteCell("RET",s);
       return;
    }
  }
}
     WriteCell("dname",notfound);
     WriteCell("Keyword","");
     WriteCell("VM",notfound);
     WriteCell("VR",notfound);
     WriteCell("RET","");
}

function GanzCs(s1,s2){
  return (s1==s2);
}

function Ganz(s1,s2){
  return (s1==s2.toLowerCase());
}

function AnfangCs(s1,s2){
  return (0==s2.indexOf(s1));
}

function Anfang(s1,s2){
  return (0==s2.toLowerCase().indexOf(s1));
}

function TeilCs(s1,s2){
  return (-1<s2.indexOf(s1));
}

function Teil(s1,s2){
  return (-1<s2.toLowerCase().indexOf(s1));
}

function AlwaysTrue(s1,s2){
  return true;
}


function GetRow(atable){
    var arow = document.createElement("tr");
    atable.appendChild(arow);
    return arow;
}


function getkeyword(s){
 s=s.replace(/μ/,"u");  //µ
 s=s.replace(/'s/g,"");
 if (s.charAt(0)=='3'){s=s.replace(/3/,"Three");};
 if (s.charAt(0)=='k'){s=s.replace(/k/,"K");};
 if (s.search(/.+\(.+/)>-1){s=s.replace(/(FOI)/,"");
                            s=s.replace(/\(s\)/,"s");};
 if (s.search(/.+\-sa.+/)>-1){s=s.replace(/-sa/,"sa");};
 if (s.search(/De\-.+/)>-1){s=s.replace(/De-/,"De");};
 s=s.replace(/DIALOG/,"Dialog");
 n=s.length;
 result='';
 var arr=s.split('');
 for (var i=0;i<n;i++){
   c=arr[i];
   if ((c==' ')||(c=='/')||(c=='-')||(c=="'")||(c==',')||(c=='&')||(c=='(')||(c==')')){
     if (i+1<n){
   var c1=arr[i+1];
   if (!(((c=='/')&&(c1=='d'))|| ((c==' ')&&(c1=='m'))))
     {c1=c1.toUpperCase();};
   arr[i+1]=c1;};
}
   else {result+=c;};
};
  return result;
}

function SuchenR(){
var aname=document.DpR.RName.value;
var agroup=document.DpR.RGroup.value;
var avr=document.DpR.RVR.value;


if ((avr=="") && (agroup=="")){ 
if (aname.length<2){
     MyAlert("Name must be at least 2 characters long, unless you specify Group or VR.\nName muss mindestens 2 Zeichen lang sein, es sei denn, Sie spezifizieren Group oder VR.");
     return;	
}
}

if (agroup!="") {
     agroup=stuff(agroup).toUpperCase();
     if (!ValStr(agroup)){
     MyAlert("Invalid Group value.\nUngültiger Wert für Gruppe.");
     return;	
}
}

var klein=!document.DpR.CaseSen.checked;
if (klein) {aname=aname.toLowerCase();};

var cfct;
if (aname!=""){
  switch (document.DpR.Match.value){
   case 'Exakt': if (klein) {cfct=Ganz;} else {cfct=GanzCs;};
           break;
   case 'Anfang': if (klein) {cfct=Anfang;} else {cfct=AnfangCs;};
           break;
   case 'Teil':  if (klein) {cfct=Teil;} else {cfct=TeilCs;};
           break;
   default: cfct=GanzCs;
  };
}else{
  cfct=AlwaysTrue;}

status='Initializing ..';
ErgLoeschenR('RTable');

    treffer=0;
var atable=document.getElementById('RTable');//.childNodes[2];  //TBody wg. IE

           atbody=atable.tBodies[0];

status='Searching ..';
var Anzahl=fns.length;
  for (var i=0;i<Anzahl;i++){
     s=fns[i].getElementsByTagName("name")[0].firstChild.nodeValue;
     if (cfct(aname,s)) {
       s2=fns[i].getElementsByTagName("group")[0].firstChild.nodeValue;
       if ((agroup=="") || (agroup==s2.toUpperCase())){
          if (fns[i].getElementsByTagName("VR")[0].firstChild) 
            {s3=fns[i].getElementsByTagName("VR")[0].firstChild.nodeValue;} else
            {s3="";}
          if ((avr=="") || (avr==s3)){
             var arow=GetRow(atbody);
             WriteCellR(arow,s2);
             WriteCellR(arow,fns[i].getElementsByTagName("element")[0].firstChild.nodeValue);
             WriteCellR(arow,s);
             WriteCellR(arow,getkeyword(s));
             WriteCellR(arow,s3);
             WriteCellR(arow,fns[i].getElementsByTagName("VM")[0].firstChild.nodeValue);
            if (fns[i].getElementsByTagName("RET")[0]) 
               {s='retired';} else
            if (fns[i].getElementsByTagName("NDE")[0]) 
               {s='DICONDE';} else
               {s="";}
             WriteCellR(arow,s);
            treffer++;
           }
       } 
    }
}

status='Finalizing ..';

   if (treffer==0){
      atable.style.display='none';
   } else {
      atable.style.display='inline';
   }
   WriteCell("Treffer",treffer);
   WriteCell("Begriff",document.DpR.RName.value);

status='';
}

function SuchenU(){
var searchdir= (document.DpU.Art[1].checked);

var astring=document.DpU.UString.value;
var atype=document.DpU.UType.value;
var apart=document.DpU.UPart.value;

if ((atype=="") && (apart=="")){ 
if (astring.length<3){
     MyAlert("Name or Value must be at least 3 characters long, unless you specify Type or Part.\nName oder Wert muss mindestens 3 Zeichen lang sein, es sei denn, Sie spezifizieren Typ oder Teil.");
     return;	
}
}


var klein=!document.DpU.CaseSen.checked;
if (klein) {astring=astring.toLowerCase();};

var cfct;
if (astring!=""){
  switch (document.DpU.Match.value){
   case 'Exakt': if (klein) {cfct=Ganz;} else {cfct=GanzCs;};
           break;
   case 'Anfang': if (klein) {cfct=Anfang;} else {cfct=AnfangCs;};
           break;
   case 'Teil':  if (klein) {cfct=Teil;} else {cfct=TeilCs;};
           break;
   default: cfct=GanzCs;
  };
}else{
  cfct=AlwaysTrue;}

status='Initializing ..';
ErgLoeschenR('UTable');

    treffer=0;
var atable=document.getElementById('UTable');//.childNodes[2];  //TBody wg. IE

           atbody=atable.tBodies[0];

status='Searching ..';
var Anzahl=fns.length;
var topb, top2;
  if (searchdir){topb="name"; top2="value";}
   else {topb="value"; top2="name";};
//try {
  for (var i=0;i<Anzahl;i++){
     s=fns[i].getElementsByTagName(topb)[0].firstChild.nodeValue;
     if (cfct(astring,s)) {
       s2=fns[i].getElementsByTagName(top2)[0].firstChild.nodeValue;
          if (fns[i].getElementsByTagName("type")[0].firstChild) 
            {s3=fns[i].getElementsByTagName("type")[0].firstChild.nodeValue;} else
            {s3="";}
          if ((atype=="") || (atype==s3)){
          if (fns[i].getElementsByTagName("part")[0].firstChild) 
            {s1=fns[i].getElementsByTagName("part")[0].firstChild.nodeValue;} else
            {s1="";}             
          if ((apart=="") || (apart==s1)){
             var arow=GetRow(atbody);
             if (searchdir) {WriteCellR(arow,s2)};
             WriteCellR(arow,s);
             if (!searchdir) {WriteCellR(arow,s2)};
             WriteCellR(arow,s3);
             WriteCellR(arow,s1);
           if (fns[i].getElementsByTagName("reference")[0]){
            WriteCellR(arow,fns[i].getElementsByTagName("reference")[0].firstChild.nodeValue);}
           else {WriteCellR(arow,'');};
           if (fns[i].getElementsByTagName("cid")[0]){
            WriteCellR(arow,fns[i].getElementsByTagName("cid")[0].firstChild.nodeValue,'right');}
           else {WriteCellR(arow,'');};
            treffer++;
           }
    }}
}
// }catch(e) {MyAlert(s3);};
status='Finalizing ..';

   if (treffer==0){
      atable.style.display='none';
   } else {
      atable.style.display='inline';
   }
   WriteCell("Treffer",treffer);
   WriteCell("Begriff",astring);

status='';
}


function init(isG,url) { 
isGadget=isG;
if (isGadget) {
    url="http://www.dicom-solutions.com"+url;
   _IG_FetchXmlContent(url, function (rfns) {
           if (rfns == null || typeof(rfns) != "object" || 
                      rfns.firstChild == null) {
              _gel("content__MODULE_ID__").innerHTML = "<i>Invalid data.</i>";
              return;
           };
    fns=rfns.getElementsByTagName("entry");
    Suchen();});
} else
{
  try {	
    ajax = new XMLHttpRequest();
  } catch(w3c) {
   try {
    ajax = new ActiveXObject("Msxml2.XMLHTTP");
   } catch(msie) {
    try {
     ajax = new ActiveXObject("Microsoft.XMLHTTP");
    } catch(msie_alt) {
     MyAlert("Your browser cannot execute DICOMpedia.\nIhr Browser kann DICOMpedia nicht ausführen.");
     return false;	
    }
   }
  }
  SetCursor('wait');
  ajax.open('GET', url, true);
  ajax.setRequestHeader('Content-Type', 'text/xml');
  ajax.setRequestHeader('If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT');
  ajax.send(null);
  ajax.onreadystatechange = function() {
   if (ajax.readyState == 4) {
    if (ajax.status != 200 && ajax.status != 0) {MyAlert(url);
     MyAlert("XML file could not be found.\nXML-Datei konnte nicht gefunden werden!");
     SetCursor('default');
     return false;
    }else
   {   
   fns = ajax.responseXML.getElementsByTagName("entry");
   finden();
   } 
   }
}}
SetCursor('default');
//System.Gadget.Flyout.show=true;
}

