// global variables
//
var isMozilla;
var dragObject  = null;
var mouseOffset = null;
var textArea = null;
var focusElement = null;

function TEinit()
{
   // check browser
   isMozilla = (document.all) ? 0 : 1;
   TEinsertDimmDiv();
   document.write('<div id="TEfloating"></div>');
}

function TEinsertDimmDiv()
{
    document.write('<div id="TEdimmer" style="width:'+
    window.screen.width + 'px; height:' + window.screen.height +'px"></div>');
}

function TEshowEditWindow(bodyCode,textAreaId,focusId,buttons)
{
    document.getElementById('TEdimmer').style.visibility = "visible";
    var tFloat = document.getElementById('TEfloating');

    var tHeader = '<div id="TEheaderBgr">';
    tHeader += '<div class="TEheaderBgrLeft"></div>';
    tHeader += '<div class="TEheaderBgrMiddle"></div>';
    tHeader += '<div class="TEheaderBgrRight"></div>';

    tHeader += '<div id="TEheader">';
    tHeader += '<div id="TEheaderClose" onMouseOver="TEeditWindowCloseMouseIn(this);" onMouseOut="TEeditWindowCloseMouseOut(this);"></div>';
    tHeader += '</div></div>';
    
    var tToolbar = '';
    if (textAreaId!='') {tToolbar = TEgetToolbarCode();}
    
    if (!buttons) {var buttons = [];}
    var closeButton = new Object;
    buttons[buttons.length] = getCloseButton("TEeditWindowClose()");
    
    var tButtons = '<div id="TEbuttons">';
    var tButtonsStart = 50;
    var tButtonsSpace = 110;
    var tButtonsX = tButtonsStart;
    for (var i=0; i<buttons.length; i++) {
        var tButtonDef = TEgetButtonDefinition(tButtonsX,buttons[i].title,buttons[i].script,buttons[i].image);
        tButtons += tButtonDef;
        tButtonsX += tButtonsSpace;
    }
    tButtons += '</div>';
    
    var tBody = '<div id="TEbody">' + tToolbar + '<div id="TEinner">' + bodyCode + '</div>' + tButtons + '</div>';

    tFloat.innerHTML = tHeader + tBody;
    tFloat.style.visibility = "visible";
    if (textAreaId!='') {textArea = document.getElementById(textAreaId);}

    //register events for drag and drop and for close button
    var tFloatHeader = document.getElementById('TEheader');
    var tCloseButton = document.getElementById('TEheaderClose');
    if (isMozilla) {
       tFloatHeader.addEventListener('mousedown',TEMouseDown,false);
       //window.addEventListener('mousemove',TEMouseMove,false);
       //register event for close
       tCloseButton.addEventListener('click',TEeditWindowClose,false);
    } else {
       tFloatHeader.attachEvent('onmousedown',TEMouseDown);
       //document.attachEvent('onmousemove',TEMouseMove);
       //register event for close
       tCloseButton.attachEvent('onclick',TEeditWindowClose);
    }
    
    //focus the desired element. If empty, focus
    if (focusId) {focusElement = document.getElementById(focusId);}
    if (focusElement==null) {focusElement = tCloseButton;}
    focusElement.focus();
}

function TEhideEditWindow()
{
    document.getElementById('TEdimmer').style.visibility = "hidden";
    var tFloat = document.getElementById('TEfloating');

    //unregister events for drag and drop
    var tFloatHeader = document.getElementById('TEheader');
    var tCloseButton = document.getElementById('TEheaderClose');
    if (isMozilla) {
       tFloatHeader.removeEventListener('mousedown',TEMouseDown,false);
       window.removeEventListener('mouseup',TEMouseUp,false);
       window.removeEventListener('mousemove',TEMouseMove,false);
       //register event for close
       tCloseButton.removeEventListener('click',TEeditWindowClose,false);
    } else {
       tFloatHeader.detachEvent('onmousedown',TEMouseDown);
       document.detachEvent('onmouseup',TEMouseUp);
       document.detachEvent('onmousemove',TEMouseMove);
       //register event for close
       tCloseButton.detachEvent('click',TEeditWindowClose);
    }
    
    tFloat.style.visibility = "hidden";
    //delete float content
    tFloat.innerHTML = '';
}

function TEeditWindowCloseMouseIn(button)
{
   button.style.backgroundPosition = "18px 0px";
}

function TEeditWindowCloseMouseOut(button)
{
   button.style.backgroundPosition = "0px 0px";
}

function TEeditWindowClose()
{
   TEhideEditWindow();
}

function TEgetButtonDefinition(x,name,script,icon)
{
    var tButton = '<div class="TEbutton" style="left:'+x+'px;" onMouseOver="TEbuttonMouseIn(this);" onMouseOut="TEbuttonMouseOut(this);" onClick="'+script+';">';
    tButton += '<div class="buttonLeft"></div><div class="buttonMiddle">';
    tButton += '<img src="'+icon+'">'+name+'</div><div class="buttonRight"></div></div>';
    return tButton
}

function getOKButton(script,name,image)
{
    if (!name) {var name="Vložit";}
    if (!image) {var image="/img/floating/ok.png";}
    if (!script) {var script="";}
    var button = new Object;
    button.title=name;
    button.image=image;
    button.script=script;
    return button;
}

function getEraseButton(script,name,image)
{
    if (!name) {var name="Vymazat";}
    if (!image) {var image="/img/floating/erase.png";}
    if (!script) {var script="";}
    var button = new Object;
    button.title=name;
    button.image=image;
    button.script=script;
    return button;
}

function getCloseButton(script,name,image)
{
    if (!name) {var name="Zavřít";}
    if (!image) {var image="/img/floating/cancel.png";}
    if (!script) {var script="";}
    var button = new Object;
    button.title=name;
    button.image=image;
    button.script=script;
    return button;
}

function TEbuttonMouseIn(button)
{
    var subdivs = button.getElementsByTagName("div");
    for (var i=0;i<3;i++) {subdivs[i].style.backgroundPosition="0% 100%";}
}

function TEbuttonMouseOut(button)
{
    var subdivs = button.getElementsByTagName("div");
    for (var i=0;i<3;i++) {subdivs[i].style.backgroundPosition="0% 0%";}
}

function TEgetToolbarCode()
{
       var tToolbar = '<div id="toolbaroutter"><div id="toolbar">';
       tToolbar += '  <span class="btn" title="Tučné" onclick="TEInsertBold()"><img src="../img/toolbar/icons/bold.png" alt="Tučné"></span>';
       tToolbar += '  <span class="btn" title="Kurzíva" onclick="TEInsertItalic()"><img src="../img/toolbar/icons/italic.png" alt="Kurzíva"></span>';
       tToolbar += '  <span class="separator"></span>';
       //tToolbar += '  <span class="btn" onclick="TEInsertList(false)" title="Seznam"><img src="../img/toolbar/icons/ul.png" alt="Seznam"></span>';
       //echo '  <span class="btn" onclick="TEInsertList(true)" title="Číslovaný seznam"><img src="../img/toolbar/icons/ol.png" alt="Číslovaný seznam"></span>';
       //echo '  <span class="separator"></span>';
       tToolbar += '  <span class="btn" onclick="TEInsertLink()" title="Odkaz"><img src="../img/toolbar/icons/link.png" alt="Odkaz"></span>';
       tToolbar += '  <span class="separator"></span>';
       tToolbar += '  <span class="btn" onclick="TEInsertSmile(\'grin\')" title="Zazubení"><img src="../img/toolbar/emoticons/grin.png" alt="Zazubení"></span>';
       tToolbar += '  <span class="btn" onclick="TEInsertSmile(\'smile\')" title="Úsměv"><img src="../img/toolbar/emoticons/smile.png" alt="Úsměv"></span>';
       tToolbar += '  <span class="btn" onclick="TEInsertSmile(\'surprised\')" title="Překvapení"><img src="../img/toolbar/emoticons/surprised.png" alt="Překvapení"></span>';
       tToolbar += '  <span class="btn" onclick="TEInsertSmile(\'tongue\')" title="Vypláznutý jazyk"><img src="../img/toolbar/emoticons/tongue.png" alt="Vypláznutý jazyk"></span>';
       tToolbar += '  <span class="btn" onclick="TEInsertSmile(\'unhappy\')" title="Nešťastný"><img src="../img/toolbar/emoticons/unhappy.png" alt="Nešťastný"></span>';
       tToolbar += '  <span class="btn" onclick="TEInsertSmile(\'wink\')" title="Mrknutí"><img src="../img/toolbar/emoticons/wink.png" alt="Mrknutí"></span>';
       tToolbar += '</div></div>';
       return tToolbar;
}

//funkce pro toolbar - vkladani formatovacich znaku a smajliku
function TEInsertBold()
{
      var length = TEGetTextLength(textArea.value);
      textArea.value = textArea.value + '[b][/b]';
	  TESetSelection(length+3,length+3);
}

function TEInsertItalic()
{
      var length = TEGetTextLength(textArea.value);
      textArea.value = textArea.value + '[i][/i]';
	  TESetSelection(length+3,length+3);
}

function TEInsertSmile(name)
{
      var length = TEGetTextLength(textArea.value);
      var insString;
      switch(name) {
         case 'grin':
              insString=':D';
              break;
         case 'smile':
              insString=':)';
              break;
         case 'surprised':
              insString='=O';
              break;
         case 'tongue':
              insString=':P';
              break;
         case 'unhappy':
              insString=':(';
              break;
         case 'wink':
              insString=';)';
              break;
      }
      textArea.value = textArea.value + insString;
	  TESetSelection(length+insString.length,length+insString.length);
}

function TEInsertLink()
{
      var link = prompt('Zadej odkaz, který chceš vložit','http://');
      if ((link==null)||(link=='')) {
           textArea.focus();
           return;
      }
      var length = TEGetTextLength(textArea.value);
      var insStr = '[a]"zde":' + link + '[/a]';
      textArea.value = textArea.value + insStr;
      TESetSelection(length+4,length+7);
}

//Funkce pro praci s textArea - vyber, delka textu
function TEGetSelection()
{
	textArea.focus();
	var isFF = false;
	var textSelected = false;
	if(navigator.userAgent.toLowerCase().indexOf("firefox") > 0){
	isFF = true;
	}

	var begin,selection,end;
	if (isFF == true){
		if (textArea.selectionStart!= undefined) {
			begin = textArea.value.substr(0, textArea.selectionStart);
			selection = textArea.value.substr(textArea.selectionStart, textArea.selectionEnd - textArea.selectionStart);
			end = textArea.value.substr(textArea.selectionEnd);
			if (selection.length > 0){
				textSelected = true;
			}
		}
	} else{
		if (window.getselection){
			selection = window.getselection();
		}else if (document.getselection){
			selection = document.getselection();
		}else if (document.selection){
			selection = document.selection.createRange().text;
		}
		var startPos = textArea.value.indexOf(selection);
		if (startPos!= 0){
			var endPos = textArea.value.indexOf(selection) + selection.length;
			begin = textArea.value.substr(0,startPos);
			end = textArea.value.substr(endPos, textArea.value.length);
			textSelected = true;
		}
	}
    return selection;
}

function TESetSelection(start, end)
{
	var s=textArea.scrollTop;

	if (document.selection) { // IE…
        var sel = textArea.createTextRange();
        sel.collapse(true);
        sel.moveStart('character', start);
        sel.moveEnd('character', end - start);
        sel.select();
        textArea.focus();
    } else if (textArea.selectionStart) { // Mozilla/Netscape…
        textArea.focus();
        textArea.selectionStart = start;
        textArea.selectionEnd = end;
    }
    textArea.scrollTop=textArea.scrollHeight;
}

function TEGetTextLength(text)
{
    var n = 0;
    for (var i = 0; i < text.length; i++) {
        if (text.charCodeAt(i) != 13) {
            n++;
        }
    }
    return n;
}


/////////////////////////////////////////////////////////////////
//// CONSTRUCT AND SHOW WINDOW FOR EDITING A NEW ENTRY //////
////////////////////////////////////////////////////////////////
function showNewEntryWindow(processor,parentEntry)
{
      if (parentEntry!=0) {var tSubject='Re: '+TEgetEntrySubject(parentEntry);}
      else {var tSubject='';}
      var tBody = '<div class="entry" id="newEntryDialog">';
      tBody += '<form action="' + processor + '" method="post" target="_top" name="newEntryFormFloat">';
      tBody += '<input type="hidden" name="action" value="newEntrySubmited" />';
      tBody += '<input type="hidden" name="parentEntry" value="' +parentEntry+ '" />';

      tBody += '<div class="head">';
      tBody += '<span class="subject">' + '<input class="newEntrySubject" type="text" name="newSubject" value="' +tSubject+ '" maxlength=33>' + '</span>';
      tBody += '</div>';
      tBody += '<textarea id="newEntryTextFloat" name="newText" wrap="soft" rows=10 class="newEntryText"></textarea>';
      tBody += '</form>';
      tBody += '</div>';
      
      var buttons = [];
      buttons[0] = getOKButton("TEnewEntrySend();");
      buttons[1] = getEraseButton("TEnewEntryReset();");
      TEshowEditWindow(tBody,'newEntryTextFloat','newEntryTextFloat',buttons);
}

function TEnewEntryReset()
{
     var form=self.document.forms.newEntryFormFloat;
     form.reset();
     form.newText.focus();
}

function TEnewEntrySend()
{
    var form=self.document.forms.newEntryFormFloat;
    form.submit();
}

/////////////////////////////////////////////////////////////////
//// CONSTRUCT AND SHOW WINDOW FOR EDITING AN ENTRY //////
////////////////////////////////////////////////////////////////
function showEditEntryWindow(entryID,processor)
{
      var tBody = '<div class="entry">';
      tBody += '<form action="' + processor + '" method="post" target="_top" name="editEntryFormFloat">';
      tBody += '<input type="hidden" name="action" value="EntryEdited" />';
      tBody += '<input type="hidden" name="entryID" value="'+entryID+'" />';

      tBody += '<div class="head">';

      //tBody += '<div class="control">'.$send.$space.$reset.$space.$cancel.'</div>';
      tBody += '<span class="subject" id="editEntrySubject">' +TEgetEntrySubject(entryID)+ '</span>';
      //tBody += '<span class="info">(autor: <b>' + currentUser + '</b>)</span>';

      tBody += '</div>';
      tBody += '<textarea id="editEntryTextFloat" name="newText" wrap="soft" rows=10 class="newEntryText"></textarea>';
      tBody += '</form>';
      tBody += '</div>';

      var buttons = [];
      buttons[0] = getOKButton("TEEditEntrySend();","Upravit");
      buttons[1] = getEraseButton("TEEditEntrySetContent("+entryID+");");
      TEshowEditWindow(tBody,'editEntryTextFloat','editEntryTextFloat',buttons);
      
      TEEntryFormSetContent(entryID);
}

function TEgetEntrySubject(entryID)
{
     var entrySubjectObj=document.getElementById('es_'+entryID);
     if (entrySubjectObj==null) {return "";}
     return entrySubjectObj.innerHTML;
}

function TEEntryFormSetContent(entryID)
{
      var text=TEgetEntryText(entryID);
      //ještě je potřeba nahradit <p>text</p> tímto: text\n kromě posledního řádku
      //novy radek pridavat jen v Mozille - IE to tam nejak jako kokot pridava sam
      var newLine = isMozilla ? '\n' : '';
      text = TEregReplace(text,'<[pP]>(.*?)</[pP]>','$1'+newLine);
      //poslední znak \n odstraním
      if (text.charCodeAt(text.length-1) == 10) {text = text.substr(0,text.length-1);}

      //Nejprve musim provest konverzi DB formatu na TE format
      //tj. inverzi toho, co se provadi pri vlozeni prispevku na strane serveru
      //BOLD
      text = TEregReplace(text,'(<)([bB])(>)(.*?)(<)(/[bB])(>)','[$2]$4[$6]');
      //ITALIC
      text = TEregReplace(text,'(<)([iI])(>)(.*?)(<)(/[iI])(>)','[$2]$4[$6]');
      //LINK - zde predpokladam, ze z DB leze korektni link ve tvaru <a target="target" href="link">text</a>
      //ktery prevedu na [a]"text":link[/a]
      text = TEregReplace(text,'<([aA])\\s+?target="?(.*?)"?\\s+?href="(.*?)"\\s?>(.*?)<(/[aA])>','[$1]"$4":$3[$5]');
      text = TEregReplace(text,'<([aA])\\s+?href="(.*?)"\\s+target="?(.*?)"?\\s?>(.*?)<(/[aA])>','[$1]"$4":$2[$5]');
      //SMILES - zde jsou ve tvaru <img class="smile" src="/img/toolbar/emoticons/smile_type.png">
      //musim je prevest dle typu do smile tvaru
      text = TEreplaceSmiles(text,false);

      textArea.value = text;
      textArea.focus();
}

function TEregReplace(text,regexp,replace)
{
   var reg=new RegExp(regexp,'g');
   var result=text.replace(reg,replace);
   return result;
}

function TEEditEntrySend()
{
      var form=self.document.forms.editEntryFormFloat;
      form.submit();
}

/////////////////////////////////////////////////////////////////
//// FUNKCE PRO DODATEČNOU ÚPRAVU PŘÍSPĚVKŮ PO JEJICH NAČTENÍ ///
////////////////////////////////////////////////////////////////
function TEentryOnLoad(entryID)
{
     //provedu nahradu smajliku za obrazky
     var text = TEgetEntryText(entryID);
     text = TEreplaceSmiles(text,true);
     TEsetEntryText(entryID,text);
}

//Funkce provadi prevod textove vyjadrenych smajliku na jejich HTML podobu (<img>) a zpet dle argumentu
//direction (true=text->img, false=img->text). Default je true
function TEreplaceSmiles(text,direction)
{
     //if (!direction) {var direction=true;}
     var smile_names = ['grin','smile','surprised','tongue','unhappy','wink'];
     var smile_text = [':D',':)','=O',':P',':(',';)'];
     var smile_text_regexp = [':D',':\\)','=O',':P',':\\(',';\\)'];
     for (var i=0;i<smile_names.length;i++) {
          if (direction) {
              text = TEregReplace(text,'('+smile_text_regexp[i]+')','<img class="smile" src="/img/toolbar/emoticons/'+smile_names[i]+'.png">');
          }
          else {
              //img muze byt i IMG a class muze byt bez uvozovek class=smile!!! - to je vysledek IE!!!
              text = TEregReplace(text,'<(img|IMG) class="?smile"? src=".*?/img/toolbar/emoticons/'+smile_names[i]+'\.png">',smile_text[i]);
          }
     }
//     alert(text);
     return text;
}

function TEgetEntryText(entryID)
{
     var entryTextObj=document.getElementById('et_'+entryID);
     if (entryTextObj==null) {return "";}
     return entryTextObj.innerHTML;
}

function TEsetEntryText(entryID,newText)
{
     var entryTextObj=document.getElementById('et_'+entryID);
     if (entryTextObj==null) {return;}
     entryTextObj.innerHTML=newText;
}

/////////////////////////////////////////////////////////////
//DRAG AND DROP FUNCTIONALITY //////////////////////////////
////////////////////////////////////////////////////////////
function getMouseOffset(target, ev){
	ev = ev || window.event;

	var docPos    = getPosition(target);
	var mousePos  = mouseCoords(ev);
	return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
}

function getPosition(e){
	var left = 0;
	var top  = 0;

	while (e.offsetParent){
		left += e.offsetLeft;
		top  += e.offsetTop;
		e     = e.offsetParent;
	}

	left += e.offsetLeft;
	top  += e.offsetTop;

	return {x:left, y:top};
}

function mouseCoords(ev){
	if(ev.pageX || ev.pageY){
		return {x:ev.pageX, y:ev.pageY};
	}
	return {
		x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
		y:ev.clientY + document.body.scrollTop  - document.body.clientTop
	};
}

function TEMouseDown(ev)
{
    if (isMozilla) {
       //tFloatHeader.addEventListener('mousedown',TEMouseDown,false);
       window.addEventListener('mouseup',TEMouseUp,false);
       window.addEventListener('mousemove',TEMouseMove,false);
    } else {
       //tFloatHeader.attachEvent('onmousedown',TEMouseDown);
       document.attachEvent('onmouseup',TEMouseUp);
       document.attachEvent('onmousemove',TEMouseMove);
    }
    //draging starts
    dragObject  = document.getElementById('TEfloating');
    mouseOffset = getMouseOffset(dragObject, ev);
    return false;
}

function TEMouseMove(ev)
{
    ev           = ev || window.event;
	var mousePos = mouseCoords(ev);
	if (dragObject) {
		dragObject.style.top = (mousePos.y - mouseOffset.y)+"px";
		dragObject.style.left = (mousePos.x - mouseOffset.x)+"px";
		return false;
	}
}

function TEMouseUp()
{
    if (isMozilla) {
       //tFloatHeader.removeEventListener('mousedown',TEMouseDown,false);
       window.removeEventListener('mouseup',TEMouseUp,false);
       window.removeEventListener('mousemove',TEMouseMove,false);
    } else {
       //tFloatHeader.detachEvent('onmousedown',TEMouseDown);
       document.detachEvent('onmouseup',TEMouseUp);
       document.detachEvent('onmousemove',TEMouseMove);
    }
    dragObject = null;
    if (focusElement!=null) {focusElement.focus();}
}
/////////////////////////////////////////////////////////////
// DRAG AND DROP FUNCTIONALITY END //////////////////////////
////////////////////////////////////////////////////////////

