function createElm(lBox,lId,lClass) {
  var Elm = document.createElement(lBox);
  if (lId)
    Elm.setAttribute('id',lId);
  if (lClass) {
  	Elm.className = lClass;
    // var aClass = document.createAttribute('class');
    // aClass.nodeValue = lClass;       	
  }	
  return Elm;  
}

function createList(o,lId,lClass,aValue) {
  var Elm = document.createElement('ul');
  if (lId)
    Elm.setAttribute('id',lId);
  if (lClass) {
    var aClass = document.createAttribute('class');
    aClass.nodeValue = lClass;                
  }  
  for (var x in aValue) {
    var lElm = document.createElement("li");
    // createTextElm(lElm,aValue[x]['TITLE']);
    if (!aValue[x]['TITLE'] && aValue[x]['TITLE'] != undefined)
       aValue[x]['TITLE'] = 'No entries';
    if (aValue[x]['TITLE'] != undefined) {
      createTextLink(0,'blank',lElm,aValue[x]['LINK'],aValue[x]['TITLE'],aValue[x]['DESCRIPTION'],lClass,'','')
      Elm.appendChild(lElm);
    }
    // alert(aValue);
  }
  if (lClass) {
    Elm.setAttributeNode(aClass);
  }
  if (o)
    o.appendChild(Elm);
}

function createImgGalery(o,lId,lClass,aValue) {
  var z = '';
  var dElm = document.createElement('div');
  var dClass = document.createAttribute('class');
  dClass.nodeValue = 'dPhotoGal';
  var Elm = document.createElement('ul');
  if (lId)
    Elm.setAttribute('id',lId);
  if (lClass) {
    var aClass = document.createAttribute('class');
    aClass.nodeValue = lClass;
  }
  for (var x in aValue) {
    z = aValue[x]['MEDIA:THUMBNAIL'].substr(0,aValue[x]['MEDIA:THUMBNAIL'].indexOf('.JPG') + 4);
    if (z == 'htt')
      z = aValue[x]['MEDIA:THUMBNAIL'].substr(0,aValue[x]['MEDIA:THUMBNAIL'].indexOf('.jpg') + 4);
    var lElm = document.createElement("li");
    // createTextElm(lElm,aValue[x]['TITLE']);
    // alert(aValue[x]['MEDIA:DESCRIPTION']);
    var zz = aValue[x]['LINK'];
    CreateImgs(lElm,z,'',aValue[x]['MEDIA:DESCRIPTION'],'onclick',"OpenLinkedURI('"+zz+"')");
    // createTextLink(0,'blank',lElm,aValue[x]['LINK'],aValue[x]['TITLE'],aValue[x]['DESCRIPTION'],lClass,'','')

    Elm.appendChild(lElm);
    // alert(aValue);
  }
  if (lClass) {
    Elm.setAttributeNode(aClass);
  }
  dElm.appendChild(Elm);
  dElm.setAttributeNode(dClass);
  o.appendChild(dElm);
}

function createCalendar(o,lId,lClass,aValue) {
  var dElm = document.createElement('div');
  var dClass = document.createAttribute('class');
  dClass.nodeValue = 'dCalendar';
  var Elm = document.createElement('ul');
  if (lId)
    Elm.setAttribute('id',lId);
  if (lClass) {
    var aClass = document.createAttribute('class');
    aClass.nodeValue = lClass;
    Elm.setAttributeNode(aClass);
  }
  for (var x in aValue) {
    var lElm = document.createElement("li");
    // createTextElm(Elm,aValue[x]['TITLE']);
    createTextLink(0,0,Elm,'#',aValue[x]['TITLE'],aValue[x]['DESCRIPTION'],'','','');
    Elm.appendChild(lElm);
    // alert(aValue);
  }
  dElm.appendChild(Elm);
  dElm.setAttributeNode(dClass);
  o.appendChild(dElm);
}

function createBoxElm(lBox,o,lId,lClass,lValue) {
  var Elm = document.createElement(lBox);
  if (lId)
    Elm.setAttribute('id',lId);
  if (lClass) {
    var aClass = document.createAttribute('class');
    aClass.nodeValue = lClass;                
  }  
  createTextElm(Elm,lValue);
  if (lClass) {
    Elm.setAttributeNode(aClass);
  }	
  o.appendChild(Elm); 
}

function FrmRed() { // action allways first argument
	var argv = FrmRed.arguments;
  var argc = argv.length;
	// var o = document.getElementById('FrmRed'); 
	var o = document.getElementsByTagName('body');
	var oForm = DOMAddForm("fSubmit",argv[0]); 
  setEvent(oForm, 'onsubmit','return false');
  for (var i = 1; i < argc; i++) { // offset = 1
    var oInput = DOMAddFormInput('hidden',argv[i].substring(0,argv[i].indexOf('#')),'','',argv[i].substring(argv[i].indexOf('#')+1));
    oForm.appendChild(oInput)
    o[0].appendChild(oForm);
    document.fSubmit.submit();
  }
}	

function createFormElm(o,lType,lId,lClass,lChecked,lEvent,lAction) { // createFormElm('checkbox','i'+x,Int2Boolean(aHit[x][8]['data'],'onclick','CartAction('+tgtId+',"'+aHit[x][2]['id']+'",this.id,this.checked)');
  var Elm = document.createElement('input');
  Elm.setAttribute('id',lId);
  var attrElm = document.createAttribute('type');
  attrElm.nodeValue = lType;
  Elm.setAttributeNode(attrElm);
  if (lClass)
    Elm.className = lClass;
  if (lType == 'checkbox')
    Elm.checked = Elm.defaultChecked = lChecked; 
  o.appendChild(Elm);  
  if (lEvent && lAction)
    setEvent(Elm,lEvent,lAction);
}

function createTextElm(o,lTxt) {
  var EText = document.createTextNode(lTxt);
  o.appendChild(EText);	
}

function createEmailLink(o,lEmail,lName,lTitle,lClass) {
 var Elm = document.createElement('a');
  var attrHREF = document.createAttribute('href');
  if (lTitle)
    Elm.setAttribute('title',lTitle);
  if (lClass) {
    var aClass = document.createAttribute('class');
    aClass.nodeValue = lClass;
    Elm.setAttributeNode(aClass);
  }  
  var nodeLinkText = document.createTextNode(lName);
  o.appendChild(Elm);
  attrHREF.nodeValue = 'mailto:'+lEmail;
  Elm.appendChild(nodeLinkText);
  Elm.setAttributeNode(attrHREF);
  o.appendChild(Elm);
}	

function createTextLink(lRemove,lPostfix,o,lLink,lText,lTitle,lClass,lEvent,lAction) { // sister in Desk.js. Latter should use this in due time !!
  if (lRemove && o.getElementsByTagName('a').length > 0 )
    o.removeChild(o.getElementsByTagName('a')[0]);
  var Elm = document.createElement('a');
  var attrHREF = document.createAttribute('href');
  if (lTitle)
    Elm.setAttribute('title',lTitle);
  if (lClass) {
    var aClass = document.createAttribute('class');
    aClass.nodeValue = lClass;
    Elm.setAttributeNode(aClass);
  }  
  var nodeLinkText = document.createTextNode(lText);
  o.appendChild(Elm);
  attrHREF.nodeValue = lLink;
  Elm.appendChild(nodeLinkText);
  Elm.setAttributeNode(attrHREF);
  if (lPostfix == 'blank') {
    var oAttr = document.createAttribute('target');
    oAttr.nodeValue = '_blank';
    Elm.setAttributeNode(oAttr);  
  }
  o.appendChild(Elm);
  if (lEvent && lAction)
    setEvent(Elm,lEvent,lAction);
  
  if (lPostfix) {
    var oNode = document.createElement('br');    
    o.appendChild(oNode); // SiteMap
  }  
}

function CreateImgs(o,lImg,lClass,lTitle,lEvent,lAction) { // sister in Desk.js. Latter should use this in due time !!
  var Elm = document.createElement('img');
  var oAttr = document.createAttribute('src');
  oAttr.nodeValue = lImg;
  Elm.setAttributeNode(oAttr);
  if (lTitle)
    Elm.setAttribute('title',lTitle);
  if (lClass)
    Elm.className = lClass;
  o.appendChild(Elm);
  if (lEvent && lAction)
    setEvent(Elm, lEvent, lAction);    
}

function ImgEvent(ImgId,lEvent,lAction) {
	var o = document.getElementById(ImgId);
  setEvent(o,lEvent,lAction);
}	

function removeElement(lContainer,lChild) { // Tree + Portal
  var d = document.getElementById(lContainer);
  var thisT = document.getElementById(lChild);
  if (thisT && d)
    d.removeChild(thisT);
}

function removeAllChildren(o) {
  // var len = o.childNodes.length;	
  // for( var i=len - 1; i > -1; i--){	
  	 // alert('Removing : '+o.childNodes[i]);
    // o.removeChild(o.childNodes[i]);
  // }  
  while(o.hasChildNodes() == true) {
		o.removeChild(o.childNodes[0]);
	}

}


// register an event handler to an element
function setEvent( xmlNode, strName, strFunction ) {
    strName = strName.substr( 0, 2 ) == "on" ? strName.substr( 2, strName.length ) : strName;

    // w3c compatible style, not supported by internet explorer yet
    if( document.addEventListener )
        xmlNode.addEventListener( strName, new Function( "event", "event.preventDefault( ); " + strFunction ), true );
    // Internet Explorer
    else if( document.attachEvent )
        xmlNode.attachEvent( "on" + strName, new Function( "event", strFunction ) );
    // old style (tag.onclick)
    else	
        xmlNode[ "on" + strName ] = new Function( "event", strFunction );
}

function HitGrid(aHit,tgtId,tgtPos,HitsPerPage,lHits,lqe,lColumns) {  // Portal
  // remove existing table - if any
  removeElement('HitlistPanel','pTable');	

  var Ebody = document.getElementById('HitlistPanel');
     
  Etable = createElm('table','pTable','');
  Etablebody = document.createElement("tbody");

  var gi = 1; // tgtPos counter..
  var lMax = getUpperOffset(HitsPerPage,tgtPos,lHits);
  
  DOMHeaders('HitHeader',aHit['hitlist']['headers']);
     
  for (var x=tgtPos; x <= lMax; x++) {
    if (aHit[tgtPos]) {
      
      Erow = document.createElement("tr");	
      for(var i = 0; i <= lColumns; i++) {
        // creates a <td> element
        Ecell = document.createElement("td");
        // creating all cells
      
        if (i == 0) {
          CreateImgs(Ecell,'/pics/'+aHit[x][6]['pic'],'Hit',aHit[x][6]['note'],'onclick','BrowsePanel("'+aHit['hitlist']['net']+'",'+aHit[x][2]['MtaId']+',"'+aHit[x][2]['link']+'")');
          if (aHit[x][7]['data'])
            CreateImgs(Ecell,'/pics/ThumbsUp.gif','Hit',FormTranslate('sta_aviable'),'','');
        }
        else if (i == 1) {
          createTextElm(Ecell,aHit[x][1]['data'].replace('&#x20;',' ').substr(0,15));	
        }          
        else if (i == 2) {
          createTextLink(0,0,Ecell,'#',aHit[x][2]['data'].replace('&#x20;',' '),aHit['hitlist']['view'],'','onclick','BrowsePanel("'+aHit['hitlist']['net']+'",'+aHit[x][2]['MtaId']+',"'+aHit[x][2]['link']+'")');	
        }
        else if (i == 3) {
          createTextElm(Ecell,decodeHTMLEntities(aHit[x][4]['data']));	
        }          
        else if (i == 4) {  // Cart checkbox..	
          createFormElm(Ecell,'checkbox','i'+x,'cCartCheck',Int2Boolean(aHit[x][8]['data']),'onclick','CartAction('+tgtId+',"'+aHit[x][2]['id']+'",this.id,this.checked)');	
        }               
        if (gi % 2 == 0)
          Ecell.className = 'cHitRow1'; // set bgColor...
        else
          Ecell.className = 'cHitRow2'; // set bgColor...	  
        Erow.appendChild(Ecell);

      }
      // appends the row <tr> into <tbody>
      Etablebody.appendChild(Erow);
    }
    gi++;
  }  
   Etable.appendChild(Etablebody);
   Ebody.appendChild(Etable);
   // Etable.setAttribute("border","0"); is this nec..?
}

function DOMHeaders(lClass,a) {
    // for (var x=0); x <= a.length; x++) {	
    // alert(a);
    i = 0;
    var thisClass = '';
    Erow = document.createElement("tr");
    for (var x in a) {
    	i++;	
    	if (lClass == 'HitHeader')
    	  thisClass = lClass+i;
    	else
    	  thisClass	= lClass;
      createBoxElm('td',Erow,'',thisClass,decodeHTMLEntities(a[x]['Caption']));
      /*	
      Ecell = document.createElement("td");
      var aClass = document.createAttribute('class');
      aClass.nodeValue = 'ItemHeader';            
      createTextElm(Ecell,a[x]['Caption']);
      Ecell.setAttributeNode(aClass);
      Erow.appendChild(Ecell);  
      */
    }
    Etablebody.appendChild(Erow);		
   
}

function ItemsActionLinks(o,a) {
  // mytable = document.createElement("table");
  // mytable.setAttribute('id','pUserNote');
  // mytable.style.margin="0px";
  // mytable.style.padding="0px";
  // mytable.style.border="0px";
  // mytablebody = document.createElement("tbody");
  // mycurrent_row = document.createElement("tr");		
  // mycurrent_cell = document.createElement("td");
// mycurrent_cell.style.textAlign="center";
 
  for (var x in a) {
    CreateImgs(o,a[x]['pic'],'Hit',a[x]['rawtitle'],a[x]['event'],a[x]['action']);
  }
  
  // mycurrent_row.appendChild(mycurrent_cell);  
  // mytablebody.appendChild(mycurrent_row);	
  // mytable.appendChild(mytablebody);
  // o.appendChild(mytable);
}	

function DOMItems(a) {
  removeElement('BrowsePanel','iTable');	
  var Ebody = document.getElementById('BrowsePanel');
     
  Etable = createElm('table','iTable','');
  Etablebody = document.createElement("tbody");

  var gi = 1; // tgtPos counter..
  
  if (a['list']['count'] > 0) {
    DOMHeaders('dItemHeader',a['list']['headers']);
  }	
     
  for (var x=parseInt(a['list']['offset']); x <= a['list']['count']; x++) {
    // alert(a[x]['rBarcode']);	
    // alert(parseInt(a[a['list']['offset']]['lCountRows']));
    Erow = document.createElement("tr");	
    for (var header in a['list']['headers']) {
      // creates a <td> element
      Ecell = document.createElement("td");
      Ecell.setAttribute('id','TD'+a[x]['rObjId']);
      switch (a['list']['headers'][header]['raw']) {
      	// <div id=\"LD".$x['rObjId']."\">".$x['rLendingDate']."</div>
      	case 'collection' : createTextElm(Ecell,decodeHTMLEntities(a[x]['rCollection']));
      	  break;
      	case 'shelf' : createTextElm(Ecell,decodeHTMLEntities(a[x]['rShelf']));
      	  break;
      	case 'barcode' : createTextElm(Ecell,decodeHTMLEntities(a[x]['rBarcode']));	
      	  break
      	case 'status' : createBoxElm('div',Ecell,'S'+a[x]['rObjId'],'',a[x]['rItemStatus']);// createTextElm(Ecell,decodeHTMLEntities(a[x]['rItemStatus']));	
      	  break;
      	case 'patron' : 
      	  if (decodeHTMLEntities(a[x]['rPatron'])) {
      	    Ediv = document.createElement("div");
      	    Ediv.setAttribute('id','P'+a[x]['rObjId']);
      	    if (a[x]['rEmail'].indexOf('@') > 0)	
      	      createEmailLink(Ediv,a[x]['rEmail'],a[x]['rPatron'],'Email','');
      	    else
      	      createTextLink(0,0,Ediv,a[x]['rEmail'],a[x]['rPatron'],'Link','','','');    
      	    Ecell.appendChild(Ediv);  
      	  }
      	  break;
      	case 'duedate' : 
      	  if (decodeHTMLEntities(a[x]['rDueDate'])) {
      	    createBoxElm('div',Ecell,'DD'+a[x]['rObjId'],'',a[x]['rDueDate']);// createTextElm(Ecell,decodeHTMLEntities(a[x]['rDueDate']));	
      	  }      	  
      	  break;
      	case 'lendingdate' : 
      	  if (decodeHTMLEntities(a[x]['rLendingDate'])) {
      	    createBoxElm('div',Ecell,'LD'+a[x]['rObjId'],'',a[x]['rLendingDate']);// createTextElm(Ecell,decodeHTMLEntities(a[x]['rLendingDate']));	
      	  }      	  
      	  break;
      	case 'service' : 
      	  Ediv = document.createElement("div");
      	  Ediv.id = 'L'+a[x]['rObjId'];
      	  if (a[x]['actions'] != null) {
      	    ItemsActionLinks(Ediv,a[x]['actions']);	
      	    // createTextElm(Ecell,decodeHTMLEntities(a[x]['rLendingDate']));	
      	  }      	  
      	  Ecell.appendChild(Ediv);
      	  break;      	  
      }	
      Erow.appendChild(Ecell);
         if (gi % 2 == 0)
          Ecell.className = 'cHitRow2'; // set bgColor...
        else
          Ecell.className = 'cHitRow1'; // set bgColor...	  
        Erow.appendChild(Ecell);
      Etablebody.appendChild(Erow);    	
    }
    gi++;  
    
  }
  
  Etable.appendChild(Etablebody);
  Ebody.appendChild(Etable);
  // alert('Clocing');
}	

function DOMErrorMess(lMess,lClass,lColor,lTimeout) { // used by login via mox.js
  var Ebody = document.getElementById('dError');
  if (Ebody) {
   	removeElement('dError','iTable');	

    Etable = createElm('table','iTable','');
    Etablebody = document.createElement("tbody");
    Erow = document.createElement("tr");
    Ecell = document.createElement("td");
    createTextElm(Ecell,lMess);	 
    Ecell.className = lClass;
    Erow.appendChild(Ecell);
    Etablebody.appendChild(Erow); 
    Etable.appendChild(Etablebody);
    Ebody.appendChild(Etable);
    setTimeout('Ecell.style.backgroundColor ="'+lColor+'"',(lTimeout-500));
    setTimeout("removeElement('dError','iTable');",lTimeout);        
  }
}

function DOMMess(lMess,lClass) { // used by login via mox.js
  var Ebody = document.getElementById('dError');
  if (Ebody) {
   	removeElement('dError','iTable');	

    Etable = createElm('table','iTable','');
    Etablebody = document.createElement("tbody");
    Erow = document.createElement("tr");
    Ecell = document.createElement("td");
    createTextElm(Ecell,lMess);	 
    Ecell.className = lClass;
    Erow.appendChild(Ecell);
    Etablebody.appendChild(Erow); 
    Etable.appendChild(Etablebody);
    Ebody.appendChild(Etable);       
  }
}	

function DOMAddForm(lName,lAction) { // IE-bug :: http://javascript.about.com/library/bliebug2.htm
  /*@cc_on @if (@_jscript)
  var newNode = document.createElement("<form name='"+lName+"' action='"+lAction+"'>");
  @else */
  var newNode = document.createElement("form");
  newNode.setAttribute("name",lName);
  newNode.setAttribute("method",'post');
  newNode.setAttribute("action",lAction);
/* @end @*/	
  return newNode;
}
function obs_DOMAddFormInput(lType,lName,lTitle,lValue) { // IE-bug :: http://javascript.about.com/library/bliebug2.htm
  /*@cc_on @if (@_jscript)
  var newNode = document.createElement("<input name='"+lName+"' value=''>");
  @else */
  var newNode = document.createElement("input");
  newNode.setAttribute("name",lName);
  newNode.setAttribute("type",lType);
/* @end @*/
  if (lTitle)	
    newNode.setAttribute("title",lTitle);
  if (lValue)	
    newNode.setAttribute("value",lValue);    
  return newNode;
}

function DOMAddFormInput(lType,lName,lClass,lTitle,lValue) { // IE-bug :: http://javascript.about.com/library/bliebug2.htm
  /*@cc_on @if (@_jscript)
  var newNode = document.createElement("<input type='"+lType+"' name='"+lName+"' value=''>");
  @else
  */ 
  var newNode = document.createElement("input");
  newNode.name = lName;
  newNode.id = lName;
  newNode.type = lType;
 // @end 
 if (lClass)	
    newNode.className = lClass;
  if (lTitle)	
    newNode.title = lTitle;
  if (lValue)	
    newNode.value = lValue;    
  return newNode;
}

