function widget_table() {
  var online=new object_online()
  var lines=new Array()
  var columns=new Array()
  var html=''
  var style_one=''
  var style_two=''
  var style_tmp=''
  var style_tmp2=''
  var size_class='class="m"'
  switch (X.N[global.cTag].N[online.cell].N[online.area].N[online.para].A["ID"]) {
    case "#P20":
      for (var ele in X.N[global.cTag].N[online.cell].N[online.area].N[online.para].N) {
        if (X.N[global.cTag].N[online.cell].N[online.area].N[online.para].N[ele].T=="ELEMENT") {
          lines[lines.length]=""
          for (var col in X.N[global.cTag].N[online.cell].N[online.area].N[online.para].N[ele].N) {
            if (X.N[global.cTag].N[online.cell].N[online.area].N[online.para].N[ele].N[col].V) lines[lines.length-1]+='\t'+X.N[global.cTag].N[online.cell].N[online.area].N[online.para].N[ele].N[col].V
            else lines[lines.length-1]+='\t'
          }
          lines[lines.length-1]=lines[lines.length-1].substr(1)
        }
      } break
    case "#P21": lines=online.get('text').split("~P");break
  } 

  style_one='style="color:'+online.getColor('txcolor1')+';background-color:'+online.getColor('bgcolor1')+';vertical-align:top"'
  style_two='style="color:'+online.getColor('txcolor2')+';background-color:'+online.getColor('bgcolor2')+';vertical-align:top"'
  if (online.get('sizeclass')) size_class='class="'+online.get('sizeclass')+'"'
  html='<table cellpadding=1 cellspacing=1 '+size_class+' style="background-color:'+online.getColor('bgcolor0')+'">'
  switch (online.get('pattern')) {
    case "none":
      for (var linx in lines) if (lines[linx]!=''){ 
        html+='<tr>'
        columns=lines[linx].split('\t')
        for (var cinx in columns) html+='<td '+style_one+'>'+columns[cinx]
      } break
    case "head":
      style_tmp=style_one
      for (var linx in lines) if (lines[linx]!=''){ 
        html+='<tr>'
        columns=lines[linx].split('\t')
        for (var cinx in columns) html+='<td '+style_tmp+'>'+columns[cinx]
        style_tmp=style_two
      } break
    case "column":
      for (var linx in lines) if (lines[linx]!=''){ 
        html+='<tr>'
        columns=lines[linx].split('\t')
        for (var cinx in columns) html+='<td '+((cinx==0)?style_one:style_two)+'>'+columns[cinx]
      } break
    case "headcolumn": 
      for (var linx in lines) if (lines[linx]!=''){ 
        html+='<tr>'
        columns=lines[linx].split('\t')
        for (var cinx in columns) {
          style_tmp=style_two
          if ((linx==0) || (cinx==0)) style_tmp=style_one 
          html+='<td '+style_tmp+'>'+columns[cinx]
        }
      } break
    case "zebra": 
      style_tmp=style_one
      for (var linx in lines) if (lines[linx]!=''){ 
        html+='<tr>'
        columns=lines[linx].split('\t')
        for (var cinx in columns) html+='<td '+style_tmp+'>'+columns[cinx]
        if (style_tmp==style_one) style_tmp=style_two
        else style_tmp=style_one
      } break
    case "zebrav": 
      for (var linx in lines) if (lines[linx]!=''){ 
        html+='<tr>'
        columns=lines[linx].split('\t')
        style_tmp=style_two
        for (var cinx in columns) {
          if (style_tmp==style_one) style_tmp=style_two
          else style_tmp=style_one
          html+='<td '+style_tmp+'>'+columns[cinx]
        }
      } break
    case "checkerboard":
      style_tmp=style_one
      for (var linx in lines) if (lines[linx]!=''){ 
        html+='<tr>'
        columns=lines[linx].split('\t')
        style_tmp2=style_tmp
        for (var cinx in columns) {
          if (style_tmp2==style_one) style_tmp2=style_two
          else style_tmp2=style_one
          html+='<td '+style_tmp2+'>'+columns[cinx]
        }
        if (style_tmp==style_one) style_tmp=style_two
        else style_tmp=style_one
      } break
  } 
  return html+'</table>'
}
function album_scrollbar(type,id,picNo) {
  var html_index

  switch (type) {
    case 'numbers':
      html_index='<table cellpadding=1 cellspacing=1><tr>'
      for (var pic=0;pic<Album[id].length;pic++) {
        if (pic==picNo) html_index+='<td style="border:1px solid black;background-color:white" onclick=javascript:album('+id+','+pic+')>'+pic
        else html_index+='<td style="border:1px solid black;background-color:transparent" onclick=javascript:album('+id+','+pic+')>'+pic
      } break
  }
  return html_index+'</table>'
}
function album(id,picNo) {
  document.images['album'+id].src=Album[id][picNo]['source']
  global['albumIndex'+id]=picNo
  if (Album[id][picNo]['text']) redefine('album'+id+'text',Album[id][picNo]['text'])
  else redefine('album'+id+'text','- . -')

  redefine('album'+id+'index',album_scrollbar('numbers',id,picNo))
}
function fAlbum(id) { // Floating album
  if (!floatingAlbum[id]) return
  if (!document.images['album'+id]) {
    clearInterval(floatingAlbum[id].timer)
    return
  }
  floatingAlbum[id].index++
  if (floatingAlbum[id].index==Album[id].length) floatingAlbum[id].index=0
  document.images['album'+id].src=Album[id][floatingAlbum[id].index]['source']
  if (Album[id][floatingAlbum[id].index]['text']) document.images['album'+id].alt=strexplode(Album[id][floatingAlbum[id].index]['text'])
  else document.images['album'+id].alt=''
}
function albumClick(id) { 
  if (floatingAlbum[id]) clickLink(Album[id][floatingAlbum[id].index]['linktype'],Album[id][floatingAlbum[id].index]['link'],Album[id][floatingAlbum[id].index]['linktarget'])
  else clickLink(Album[id][global['albumIndex'+id]]['linktype'],Album[id][global['albumIndex'+id]]['link'],Album[id][global['albumIndex'+id]]['linktarget'])
}
function widget_album() {
  var online=new object_online()
  var html=''
  var pa_width
  var pa_height
  var pa_edge

  Album[global.liveParagraph]=new Array()
  var thisAlbum=Album[global.liveParagraph]
  global['albumIndex'+global.liveParagraph]=0

  for (var fld in X.N[global.cTag].N[online.cell].N[online.area].N[online.para].N) {
    if (X.N[global.cTag].N[online.cell].N[online.area].N[online.para].N[fld].T!="FIELD") { // ELEMENTS ! each element corresponds to an image
      thisAlbum[thisAlbum.length]=new Array()
      for (var img in X.N[global.cTag].N[online.cell].N[online.area].N[online.para].N[fld].N) 
        thisAlbum[(thisAlbum.length-1)][X.N[global.cTag].N[online.cell].N[online.area].N[online.para].N[fld].N[img].A['ID']]=X.N[global.cTag].N[online.cell].N[online.area].N[online.para].N[fld].N[img].V
    }
  }
  pa_width=(online.get('width'))?'width="'+parseInt(online.get('width')*Factor())+'" ':''
  setImageHeight('album'+global.liveParagraph,online.get('height'))
  pa_height=(online.get('height'))?'height="'+parseInt(online.get('height')*Factor())+'" ':''
  pa_edge=(online.get('edge')=='')?'0':online.get('edge')+' style="background-color:'+online.getColor('ecolor')+'"'
  html='<table cellspacing=0 cellpadding='+pa_edge+'><tr><td style="text-align:center"><div id=album'+global.liveParagraph+'text>'
  if (thisAlbum[0]['text']) html+=thisAlbum[0]['text']
  html+='</div><tr><td onclick=javascript:albumClick('+global.liveParagraph+')><img id=album'+global.liveParagraph+' src="'+thisAlbum[0]['source']+'" '+pa_width+pa_height+'><tr><td style="text-align:center"><div id=album'+global.liveParagraph+'index>'+album_scrollbar('numbers',global.liveParagraph,0)+'</div></table>'
  return html
}
function widget_album_float() {
  var online=new object_online()
  var html=''
  var pa_width
  var pa_height
  var pa_edge
  var pa_duration
  var pa_opacity
  var pa_top
  var pa_left
  var h_top
  var h_left

  Album[global.liveParagraph]=new Array()
  var thisAlbum=Album[global.liveParagraph]
  if (!floatingAlbum[global.liveParagraph]) floatingAlbum[global.liveParagraph]=new floatingAlbumObj()

  for (var fld in X.N[global.cTag].N[online.cell].N[online.area].N[online.para].N) {
    if (X.N[global.cTag].N[online.cell].N[online.area].N[online.para].N[fld].T!="FIELD") { // ELEMENTS ! each element corresponds to an image
      thisAlbum[thisAlbum.length]=new Array()
      for (var img in X.N[global.cTag].N[online.cell].N[online.area].N[online.para].N[fld].N) 
        thisAlbum[(thisAlbum.length-1)][X.N[global.cTag].N[online.cell].N[online.area].N[online.para].N[fld].N[img].A['ID']]=X.N[global.cTag].N[online.cell].N[online.area].N[online.para].N[fld].N[img].V
    }
  }

  h_left=parseInt(X.N[global.cTag].N[online.cell].A['COORDINATES'].charAt(0))
  h_top=parseInt(X.N[global.cTag].N[online.cell].A['COORDINATES'].charAt(2))

  pa_top=(Factor()*online.getNum('top'))+(measurements.windowDim.y-22)*h_top; 
  pa_left=(Factor()*online.getNum('left'))+(measurements.windowDim.x-19)*h_left;  
  pa_width=(online.getNum('width'))?'width="'+parseInt(online.getNum('width')*Factor())+'" ':''
  setImageHeight('album'+global.liveParagraph,online.getNum('height'))
  pa_height=(online.getNum('height'))?'height="'+parseInt(online.getNum('height')*Factor())+'" ':''
  pa_edge=(online.getNum('edge')=='')?'0':online.getNum('edge')+' style="background-color:'+online.getColor('ecolor')+'"'
  pa_opacity=(online.get('opacity'))?'filter:alpha(opacity='+online.getNum('opacity')+');opacity:'+(online.getNum('opacity')/100)+';-moz-opacity:'+(online.getNum('opacity')/100)+';':''
  
  html='<div id=afloat'+global.liveParagraph+' style="position:absolute;top:'+pa_top+';left:'+pa_left+';">\
<div id='+global.liveParagraph+' style="position:absolute;"></div>\
<table cellspacing=0 cellpadding='+pa_edge+' style="'+pa_opacity+'">\
<tr><td onmouseover=javascript:editorpanel('+global.liveParagraph+') onclick=javascript:albumClick('+global.liveParagraph+')>\
<img id=album'+global.liveParagraph+' src="'+thisAlbum[0]['source']+'" '+pa_width+pa_height+' alt="'+thisAlbum[0]['text']+'">\
</table></div>'

  if (online.get('duration')) { 
    if (floatingAlbum[global.liveParagraph].timer) clearInterval(floatingAlbum[global.liveParagraph].timer)
    floatingAlbum[global.liveParagraph].timer=setInterval("fAlbum("+global.liveParagraph+")",(online.getNum('duration')*1000));
  } else if (floatingAlbum[global.liveParagraph].timer) clearInterval(floatingAlbum[global.liveParagraph].timer)
  return html
}
function widget_paragraph_float() {
  var online=new object_online()
  var html=''
  var pa_top
  var pa_left
  var pa_opacity
  var h_top
  var h_left

  Album[global.liveParagraph]=new Array()
  var thisAlbum=Album[global.liveParagraph]
  if (!floatingAlbum[global.liveParagraph]) floatingAlbum[global.liveParagraph]=new floatingAlbumObj()

  h_left=parseInt(X.N[global.cTag].N[online.cell].A['COORDINATES'].charAt(0))
  h_top=parseInt(X.N[global.cTag].N[online.cell].A['COORDINATES'].charAt(2))
  pa_top=(Factor()*online.getNum('top'))+(measurements.windowDim.y-22)*h_top; 
  pa_left=(Factor()*online.getNum('left'))+(measurements.windowDim.x-19)*h_left;    pa_opacity=(online.getNum('opacity'))?'filter:alpha(opacity='+online.getNum('opacity')+');opacity:'+(online.getNum('opacity')/100)+';-moz-opacity:'+(online.getNum('opacity')/100)+';':''
  html='<div id=afloat'+global.liveParagraph+' style="position:absolute;top:'+parseInt(pa_top)+';left:'+parseInt(pa_left)+';">\
<div id='+global.liveParagraph+' style="position:absolute;"></div>\
<table cellspacing=0 cellpadding=0 style="'+pa_opacity+'" >\
<tr><td class="'+online.get('sizeclass')+'" onmouseover=javascript:editorpanel('+global.liveParagraph+') style="color:'+online.getColor('color')+'">'+online.get('text')+'\
</table></div>'
  return html
}
function onClipboard(pid,field) {
  global.liveParagraph=pid
  var online=new object_online()
  window.clipboardData.setData("Text",online.get(field).replace(/~P/g,'\r\n')); 
  window.status='Gegevens naar clipboard gekopieerd';
}
function widget_paragraph_textarea() {
  var online=new object_online()
  var html='<table class=srolltxt cellspacing=0 cellpadding=0>\
<tr><td onmouseover=javascript:editorpanel('+global.liveParagraph+')><textarea class="'+online.get('sizeclass')+'" rows="'+online.getNum('rows')+'" \
cols="'+online.getNum('cols')+'" style="color:'+online.getColor('color')+';background-color:'+online.getColor('bcolor')+'">'+online.get('content').replace(/~P/g,'~p')+'</textarea>'
  if (online.get('copybutton')!='') html+='<tr><td style="text-align:right"><input type="button" value="'+online.get('copybutton')+'" onclick=onClipboard('+global.liveParagraph+',"content")>'
  return html+'</table>'
}
function widget_style_cursor() {
  var online=new object_online()
  if (online.get('link')) return "cursor:pointer;"
  return ""
}
function widget_sizeclass() {
  var online=new object_online()
  if (online.get('sizeclass')) return 'class="'+online.get('sizeclass')+'"'
  else return 'class="m"'
}
function widget_date_and_time() { 
  var online=new object_online()
  var datetype=online.get('datetype')
  var today=new Date()
  var months=["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"]
  var weekdays=["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"]
  var dayparts=["morgen","middag","avond","nacht"]
  switch (datetype) {
    case 'D1': return today.getDate()+'/'+(today.getMonth()+1)+'/'+today.getFullYear()
	case 'D2': return today.getDate()+' '+months[today.getMonth()]
	case 'D3': return weekdays[today.getDay()]+' '+today.getDate()+' '+months[today.getMonth()]
	case 'D4': var prefix='de'
	           if ((today.getDate()==1) || (today.getDate()==8) || (today.getDate()>=20)) prefix='ste'
	           return weekdays[today.getDay()]+' de '+today.getDate()+prefix
	case 'T1': if (today.getHours() < 5) return dayparts[3]
	           if (today.getHours() < 12) return dayparts[0]
	           if (today.getHours() < 5) return dayparts[1]
			   return dayparts[2]
	case 'T2': return (today.getHours()<10?'0':'')+today.getHours()+':'+(today.getMinutes()<10?'0':'')+today.getMinutes()
  }
  return "mmm"
}
