function printsite(x) {
 window.open('/'+x+'.html?print','Print',"width=950,height=700,left=10,top=10,scrollbars=yes,menubar=yes,toolbar=yes");
}

function shnrmimage(x) {
 var uri=x.alt.replace(/\/tn2\//,"/nrm/");
 uri+='?'+(Math.round(new Date().getTime()/1000));
 p=getPosition(x); 
 NrmImg=document.createElement('img');
 NrmImg.setAttribute('style','position:absolute;top:'+p.y+'px;left:'+p.x+'px;border:1px solid black;',0);
 NrmImg.setAttribute('src',uri,0);
 NrmImg.setAttribute('onmouseout','document.getElementsByTagName(\'body\')[0].removeChild(this);');
 document.getElementsByTagName('body')[0].appendChild(NrmImg);
}

function searchselected() {
 s=""
 if (window.getSelection) {
  s=window.getSelection();
 } else if (document.getSelection) {
  s=document.getSelection();
 } else if (document.selection) {
  s=document.selection.createRange().text;
 }
 document.getElementsByName('searchstring')[0].value=s;
 if ((s != '')&&(s != null)) {
  livesearch(s);
 }
}

function searchstringlick(x) {
 if (x.value=='Suchen') {
  x.value='';
 } else {
  x.select();
  livesearch(x.value);
 }
}

function hidesearchresult() {
 document.getElementById('searchhits').style.display='none';
 document.getElementById('listsitesdiv').style.display='none';
 document.getElementById('sitemenu').style.display='none';
 hidePreview();
}

function livesearch(x) {
 x=document.getElementsByName('searchstring')[0].value.toLowerCase();
 if (x.length > 1) {
  h=document.getElementById('searchhits');
  if (h.style.display == 'none') {
   h.innerHTML='<small>suche wird ausgefÃ¼hrt</small>';
   h.style.display='block';
  }
  new Ajax.Updater('searchhits', '/blackcms.cgi?searchontype', {asynchronous:true, evalScripts:true, parameters:Form.serialize(document.forms[0])});
 } else {
  hidesearchresult();
 }
}

function listsites(rubrik,subsite,link) {
 h=document.getElementById('listsitesdiv');
 p=getPosition(link);
 h.style.left=p.x+'px';
 new Ajax.Updater('listsitesdiv', '/blackcms.cgi?listsites&rubrik='+rubrik+'&subsite='+subsite, {onSuccess: function(anzeigen) {document.getElementById('listsitesdiv').style.display='block';}, asynchronous:true, evalScripts:true,method:'get'});
}

function shsitemenu(x) {
 h=document.getElementById('sitemenu');
 p=getPosition(x);
 p.x=p.x-90;
 h.style.left=p.x+'px';
 h.style.display='block';
}

function mySubmit()
{
 if (document.forms[1].site.value == "")
 {
  alert("Bitte Seitenname eingeben");
  document.forms[1].site.focus();
  return;
 }
 var tmp=document.forms[1].site.value.toLowerCase();
 document.forms[1].site.value=tmp;
 tmp=document.forms[1].site.value.replace(/[a-z]|[0-9]|\/|-|_/g,"");
 if (tmp != "")
 {
  alert("Ungültige(s) Zeichen im Seitenname: "+tmp);
  document.forms[1].site.focus();
  return;
 }
 if (document.forms[1].action.value == "preview")
 {
  document.forms[1].action.value="save";
  document.forms[1].target="_parent";
 }
 document.forms[1].submit();
};

function checkuserdata()
{
 formular=document.getElementById("register"); 
 if (formular.username.value == "")
 {
  alert("Bitte Benutzername eingeben");
  formular.username.focus();
  return false;
 }
 var tmp=formular.username.value.toLowerCase();
 var tmp2=tmp.replace(/[a-z]|[0-9]|-|_/g,"");
 if (tmp2 != "")
 {
  alert("UngÃ¼ltige(s) Zeichen im Benutzernamen: "+tmp);
  formular.username.focus();
  return false;
 }

 if (formular.password.value == "")
 {
  alert("Bitte Passwort eingeben");
  formular.password.focus();
  return false;
 }
 if (formular.password.value != formular.password2.value)
 {
  alert("PasswÃ¶rter stimmen nicht Ã¼berein");
  formular.password.value="";
  formular.password2.value="";
  formular.password.focus();
  return false;
 }
 if (formular.email.value == "")
 {
  alert("Bitte eMail eingeben");
  formular.email.focus();
  return false;
 }
};

function chkformular()
{
 var frm=document.getElementById('bform');
 sel_mitglieder();
 if (frm.groupname.value == "")
 {
  alert("Bitte Gruppenname eingeben");
  frm.groupname.focus();
  return false;
 }
 var tmp=frm.groupname.value.toLowerCase();
 tmp=tmp.replace(/[a-z]|[0-9]|-|_/g,"");
 if (tmp != "")
 {
  alert("Im Gruppenname sind ungültige Zeichen");
  frm.groupname.focus();
  return false;
 }
 return true;
}

function sel_mitglieder()
{
 var frm=document.getElementById('bform');
 for (i=0; i < frm.mitglieder.options.length;i++)
 {
  frm.mitglieder.options[i].selected=true;
 }
}

function add_mitglieder(x,y)
{
 var frm=document.getElementById('bform');
 NeuerEintrag = new Option(x,y,false,false);
 frm.mitglieder.options[frm.mitglieder.length]=NeuerEintrag;
}

function add_benutzer(x,y)
{
 var frm=document.getElementById('bform');
 NeuerEintrag = new Option(x,y,false,false);
 frm.benutzer.options[frm.benutzer.length]=NeuerEintrag;
}

function del_mitglied()
{
 var frm=document.getElementById('bform');
 for (i=0; i < frm.mitglieder.options.length;i++)
 {
  if (frm.mitglieder.options[i].selected == true )
  {
   add_benutzer(frm.mitglieder.options[i].text,frm.mitglieder.options[i].value)
   frm.mitglieder.options[i]=null;
   i=i-1;
  }
 }
}

function add_mitglied()
{
 var frm=document.getElementById('bform');
 for (i=0; i < frm.benutzer.options.length;i++)
 {
  if (frm.benutzer.options[i].selected == true )
  {
   add_mitglieder(frm.benutzer.options[i].text,frm.benutzer.options[i].value);
   frm.benutzer.options[i]=null;
   i=i-1;
  }
 }
}

function galerienext(nextfile,galdir) {
  new Ajax.Updater('galerie', '/blackcms.cgi?galerienext&startfile='+nextfile+'&galdir='+galdir, {asynchronous:true, evalScripts:true,method:'get'});
}

function galerieindex() {
 g=document.getElementById('galerie');
 g.style.display='';
 b=document.getElementById('galeriebild');
 b.style.display='none';
 window.location.hash="";
}

function galerieshow(url,nrfiles,nr)
{
 g=document.getElementById('galerie');
 g.style.display='none';
 if (nr > 1) { 
  navi0='<a href="javascript:galerieshow(\''+gallery[nr-2]+'\','+nrfiles+','+(nr-1)+');">ZurÃ¼ck</a>&nbsp;&nbsp;';  
 } else { navi0=''; }
 navi1='<a href="javascript:galerieindex();">&Uuml;bersicht</a>&nbsp;&nbsp;'; 
 if (nr < nrfiles) { 
  navi2='<a href="javascript:galerieshow(\''+gallery[nr]+'\','+nrfiles+','+(nr+1)+');">Vor</a>';  
 } else { navi2=''; }
 var navi=navi0+navi1+navi2;
 b=document.getElementById('galeriebild');
 b.style.display='';
 b.innerHTML='<div style="width:520px;height:20px;text-align:center;">'+navi+'</div>'+
	'<div style="padding:5px;width:520px;height:520px;background-color:white;'+
	'border:1px solid black;text-align:center;vertical-align:middle;">'+
	'<img style="" src="'+url+'?'+(Math.round(new Date().getTime()/1000))+'"/>'+
	'<div style="height:17px;background-color:#ccc;padding-top:3px;">'+desc[nr-1]+'</div></div>'+
	'<div style="width:520px;height:15px;text-align:center;">'+navi+'</div>';
 window.location.hash=url;
}

function initEditor()
{
 CKEDITOR.addStylesSet('Blackcms',[{name:'Zitat',element:'p',attributes : { 'class' : 'zitat' }},
        {name:'Artikel',element:'p',attributes : { 'class' : 'artikel' }}]);

 CKEDITOR.on('instanceReady', function(ev) {
   ev.editor.dataProcessor.writer.setRules('p',{indent:false,breakAfterOpen:false,breakAfterClose:true});
   ev.editor.dataProcessor.writer.setRules('h1',{indent:false,breakAfterOpen:false,breakAfterClose:true});
   ev.editor.dataProcessor.writer.setRules('h2',{indent:false,breakAfterOpen:false,breakAfterClose:true});
   ev.editor.dataProcessor.writer.setRules('h3',{indent:false,breakAfterOpen:false,breakAfterClose:true});
   ev.editor.dataProcessor.writer.setRules('h4',{indent:false,breakAfterOpen:false,breakAfterClose:true});
   ev.editor.dataProcessor.writer.setRules('h5',{indent:false,breakAfterOpen:false,breakAfterClose:true});
   ev.editor.dataProcessor.writer.setRules('td',{breakAfterOpen:false,breakAfterClose:true});
   ev.editor.dataProcessor.writer.setRules('li',{breakAfterOpen:false,breakAfterClose:true});
 });

 CKEDITOR.replace('text',{customConfig:'/shared/blackcms_ckeditor.js',toolbar:'Blackcms'});
}

var SORT_COLUMN_INDEX;

function linkpreview_init() {
    if (!document.getElementsByTagName) return;
    links = document.getElementsByTagName("a");
    for (li=0;li<links.length;li++) {
        thisLink = links[li];
        if ((' '+thisLink.className+' ').indexOf("iwl") != -1) {
	  makePreviewable(thisLink);
        }
    }
}

function makePreviewable(link) {
 link.innerHTML='<div style="display:inline;border:none;padding:0px;margin:0px;" onmouseover="showPreview(this)" onmouseout="hidePreview(this)">'+link.innerHTML+'</div>';
}

function showPreview(link) {
 hidePreview();
 previewWindow=document.createElement('div');
 previewWindow.setAttribute('class','previewwindow',0);
 previewWindow.setAttribute('id','previewwindow',0);
 p=getPosition(link);
 p.y+=20;
 p.x+=5;
 previewWindow.setAttribute('style','display:none;top:'+p.y+'px;left:'+p.x+'px;',0);
 if ((link.parentNode.href.search(/\.html/)) != -1) {
  x=link.parentNode.href.substring(24);
  site=x.replace(/\.html/,"");
  document.getElementsByTagName('body')[0].appendChild(previewWindow);
  new Ajax.Updater('previewwindow', '/blackcms.cgi?preview&site='+site, { method:'get', onComplete:showPreviewDiv, asynchronous:true, evalScripts:true});
 }
}

function showSearchPreview(link,uri) {
 previewWindow=document.createElement('div');
 previewWindow.setAttribute('id','previewwindow',0);
 previewWindow.innerHTML='<div id="previewtitel">Vorschau</div><div id="previewwin"></div>';
 p=getPosition(link);
 p.x-=310;
 p.y+=1;
 previewWindow.setAttribute('style','display:none;top:'+p.y+'px;left:'+p.x+'px;',0);
 if ((uri.search(/\.html/)) != -1) {
  x=uri;
  site=x.replace(/\.html/,"");
  document.getElementsByTagName('body')[0].appendChild(previewWindow); 
  new Ajax.Updater('previewwin', '/blackcms.cgi?preview&site='+site, { method:'get', onComplete:showPreviewDiv, asynchronous:true, evalScripts:true});
 }
}

function showPreviewDiv() {
 document.getElementById('previewwindow').style.display='';
}

function hidePreview() {
 if (previewWindow=document.getElementById('previewwindow')) {
  document.getElementsByTagName('body')[0].removeChild(previewWindow);
 }
}

function getPosition(element)
{
  var elem=element,tagname="",x=0,y=0;
  while ((typeof(elem)=="object")&&(typeof(elem.tagName)!="undefined"))
  {
    y+=elem.offsetTop;   
    x+=elem.offsetLeft;
    tagname=elem.tagName.toUpperCase();
    if (tagname=="BODY")
      elem=0;
    if (typeof(elem)=="object")
      if (typeof(elem.offsetParent)=="object")
        elem=elem.offsetParent;
  }
  position=new Object();
  position.x=x;
  position.y=y;
  return position;
}

function addEvent(elm, evType, fn, useCapture)
{
  if (elm.addEventListener){
    elm.addEventListener(evType, fn, useCapture);
    return true;
  } else if (elm.attachEvent){
    var r = elm.attachEvent("on"+evType, fn);
    return r;
  } 
} 

//sorttable.js

addEvent(window, "load", sortables_init);

var SORT_COLUMN_INDEX;

function sortables_init() {
    // Find all tables with class view and make them sortable
    if (!document.getElementsByTagName) return;
    tbls = document.getElementsByTagName("table");
    for (ti=0;ti<tbls.length;ti++) {
        thisTbl = tbls[ti];
        if ((' '+thisTbl.className+' ').indexOf("view") != -1) {
	  if (! thisTbl.id) {
	    thisTbl.setAttribute('id',ti,0);
          }
	  ts_makeSortable(thisTbl);
        }
    }
}

function ts_makeSortable(table) {
    if (table.rows && table.rows.length > 3) {
        var firstRow = table.rows[0];
    }
    if (!firstRow) return;
    
    if (firstRow.cells[1].innerHTML.indexOf("<b>") != -1) {
     // We have a first row: assume it's the header, and make its contents clickable links
     for (var i=0;i<firstRow.cells.length;i++) {
        var cell = firstRow.cells[i];
        var txt = ts_getInnerText(cell);
        cell.innerHTML = '<a href="#" style="color:white;text-decoration:none;" class="sortheader" '+ 
        'onclick="ts_resortTable(this, '+i+');return false;">' + 
        txt+'<span class="sortarrow">&nbsp;&nbsp;&nbsp;</span></a>';
     }
    }
}

function ts_getInnerText(el) {
	if (typeof el == "string") return el;
	if (typeof el == "undefined") { return el };
	if (el.innerText) return el.innerText;	//Not needed but it is faster
	var str = "";
	
	var cs = el.childNodes;
	var l = cs.length;
	for (var i = 0; i < l; i++) {
		switch (cs[i].nodeType) {
			case 1: //ELEMENT_NODE
				str += ts_getInnerText(cs[i]);
				break;
			case 3:	//TEXT_NODE
				str += cs[i].nodeValue;
				break;
		}
	}
	return str;
}

function ts_resortTable(lnk,clid) {
    // get the span
    var span;
    for (var ci=0;ci<lnk.childNodes.length;ci++) {
        if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];
    }
    var spantext = ts_getInnerText(span);
    var td = lnk.parentNode;
    var column = clid || td.cellIndex;
    var table = getParent(td,'TABLE');
    
    // Work out a type for the column
    if (table.rows.length <= 1) return;
    var itm = ts_getInnerText(table.rows[1].cells[column]);
    sortfn = ts_sort_caseinsensitive;
    if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;
    if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = ts_sort_date;
    if (itm.match(/^[£$]/)) sortfn = ts_sort_currency;
    if (itm.match(/^[\d\.]+$/)) sortfn = ts_sort_numeric;
    SORT_COLUMN_INDEX = column;
    var firstRow = new Array();
    var newRows = new Array();
    for (i=0;i<table.rows[0].length;i++) { firstRow[i] = table.rows[0][i]; }
    for (j=1;j<table.rows.length;j++) { newRows[j-1] = table.rows[j]; }

    newRows.sort(sortfn);

    if (span.getAttribute("sortdir") == 'down') {
        ARROW = '&nbsp;&nbsp;&uarr;';
        newRows.reverse();
        span.setAttribute('sortdir','up');
    } else {
        ARROW = '&nbsp;&nbsp;&darr;';
        span.setAttribute('sortdir','down');
    }
    
    // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
    // don't do sortbottom rows
    for (i=0;i<newRows.length;i++) { if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) table.tBodies[0].appendChild(newRows[i]);}
    // do sortbottom rows only
    for (i=0;i<newRows.length;i++) { if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) table.tBodies[0].appendChild(newRows[i]);}
    
    // Delete any other arrows there may be showing
    var allspans = document.getElementsByTagName("span");
    for (var ci=0;ci<allspans.length;ci++) {
        if (allspans[ci].className == 'sortarrow') {
            if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?
                allspans[ci].innerHTML = '&nbsp;&nbsp;&nbsp;';
            }
        }
    }
        
    span.innerHTML = ARROW;
}

function getParent(el, pTagName) {
	if (el == null) return null;
	else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())	// Gecko bug, supposed to be uppercase
		return el;
	else
		return getParent(el.parentNode, pTagName);
}
function ts_sort_date(a,b) {
    // y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
    aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
    bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
    if (aa.length == 10) {
        dt1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);
    } else {
        yr = aa.substr(6,2);
        if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
        dt1 = yr+aa.substr(3,2)+aa.substr(0,2);
    }
    if (bb.length == 10) {
        dt2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);
    } else {
        yr = bb.substr(6,2);
        if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
        dt2 = yr+bb.substr(3,2)+bb.substr(0,2);
    }
    if (dt1==dt2) return 0;
    if (dt1<dt2) return -1;
    return 1;
}

function ts_sort_currency(a,b) { 
    aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
    bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
    return parseFloat(aa) - parseFloat(bb);
}

function ts_sort_numeric(a,b) { 
    aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
    if (isNaN(aa)) aa = 0;
    bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX])); 
    if (isNaN(bb)) bb = 0;
    return aa-bb;
}

function ts_sort_caseinsensitive(a,b) {
    aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
    bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
    if (aa==bb) return 0;
    if (aa<bb) return -1;
    return 1;
}

function ts_sort_default(a,b) {
    aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
    bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
    if (aa==bb) return 0;
    if (aa<bb) return -1;
    return 1;
}
