var clientPC = navigator.userAgent.toLowerCase(); // Get client info
var clientVer = parseInt(navigator.appVersion); // Get browser version

var is_ie = ((clientPC.indexOf('msie') != -1) && (clientPC.indexOf('opera') == -1));
var is_win = ((clientPC.indexOf('win') != -1) || (clientPC.indexOf('16bit') != -1));

var pos_textarea = {start: 0, stop: 0};
var current_textarea = null;

/*
##args(r, j)
{
    var o = j[0];
    if (document.selection && typeof o.selectionStart == "undefined")
    {
	o.focus();
    }
  else
    {
	o.selectionStart = r.start;
	o.selectionEnd = r.stop;
    }
    return j;
}
getRange: extern jquery -> extern irange
*/
/*function my_getRange(o)
{
    if (document.selection && typeof o.selectionStart == "undefined")
    {
	var r = document.selection.createRange(), sr = r.duplicate();
	if (o.tagName == "INPUT") sr.expand("textedit");
	else if (o.tagName == "TEXTAREA") sr.moveToElementText(o);
	else throw new Error("IE compatibility fix failed for "+o.tagName);
	sr.setEndPoint('EndToEnd', r);
	sr = sr.text.length - r.text.length;
	return { start: sr, end: sr + r.text.length };
    }
    return { start: o.selectionStart, stop: o.selectionEnd };
}
*/



function mozWrap(txtarea, lft, rgt)
{
    var selLength = txtarea.textLength;
    var selStart = txtarea.selectionStart;
    var selEnd = txtarea.selectionEnd;
/*    if(selLength == selStart)
    {
	selStart = 0;
	selEnd = 0;
    }*/
    //alert('selstart:' + selStart + '--selend:'+selEnd);
    if (selEnd==1 || selEnd==2)
	selEnd=selLength;
    var s1 = (txtarea.value).substring(0,selStart);
    var s2 = (txtarea.value).substring(selStart, selEnd)
    var s3 = (txtarea.value).substring(selEnd, selLength);
    //alert('s1:'+s1+'--s2:'+s2+'--s3:'+s3+'--lft:'+lft);
    var theSelection = replySelection();
    /*if (theSelection != '')
	s2 = theSelection;*/
    if (theSelection != '')
	txtarea.value = s1 + lft + theSelection + rgt + s2 + s3;
    else
	txtarea.value = s1 + lft + s2 + rgt + s3;
    txtarea.selectionStart = s1.length + lft.length;
    if (theSelection != '')
	txtarea.selectionEnd = txtarea.selectionStart + theSelection.length;
    else
	txtarea.selectionEnd = txtarea.selectionStart + s2.length;
}

function storeCaret(textEl)
{
	if (textEl.createTextRange)
	{
		textEl.caretPos = document.selection.createRange().duplicate();
	}
}


function insert_txt(txt, id_form, param)
{
    if (document.forms[id_form])
    	textarea = document.forms[id_form].elements['content'];
    else
    	textarea = document.forms['addthread'].elements['content'];
    if (!isNaN(textarea.selectionStart))
    {
	var sel_start = textarea.selectionStart;
	var sel_end = textarea.selectionEnd;

	switch(txt)
	{
	case 'size':
	case 'color':
	if (param == null || param == '')
	    return;
	    mozWrap(textarea, '[' + txt + '='+ param + ']', '[/' + txt + ']');
	    break;
	case 'url':
	    if (param != null && param != '')
	    {
		mozWrap(textarea, '[' + txt + '='+ param + ']', '[/' + txt + ']');
		break;
	    }
	case 'b':
	case 'i' :
	case 'u':
	case 'center':
	case 's':
	case 'quote':
	    mozWrap(textarea, '[' + txt + ']', '[/' + txt + ']');
	    break;
	default:
	    mozWrap(textarea, txt, '');
	}
    }
    else if (clientVer >= 4 && is_ie && is_win)
    {
	if (txt == 'b' || txt == 'i' || txt == 'u' || txt == 'center' || txt == 'size' || txt == 'quote' || txt == 's' || txt == 'color' || txt == 'url')
	{
	    selText = document.selection.createRange();
	    //dump(selText);
	    var sel_from_txtarea;
	    var is_sel_empty;
	    if (selText.text == '')
		is_sel_empty = 1;
	    else
		is_sel_empty = 0;
	    //alert(getCaretPos(textarea));
//	    if (selText.parentElement() == textarea || (getCaretPos(textarea) > 0 && is_sel_empty))
	    if (selText.parentElement() == textarea)
		sel_from_txtarea = 1;
	    else
		sel_from_txtarea = 0;
	    //alert('is_sel_empty:'+is_sel_empty+'\nsel_from_txtarea:'+sel_from_txtarea);
	}
	textarea.focus();
	var sel = document.selection.createRange();
	if (txt == 'b' || txt == 'i' || txt == 'u' || txt == 'center' || txt == 'size' || txt == 'quote' || txt == 's' || txt == 'color' || txt == 'url')
	{
	    if (sel_from_txtarea == 0)
	    {
		if (current_textarea != textarea.id)
		{
		    current_textarea = textarea.id;
		    //pos_textarea = 0;
		}
		//alert('pos_textarea:'+pos_textarea);
		//alert('pos_textarea:'+pos_textarea+'\ntextarea.value.length'+textarea.value.length+'\nsel move bef insert:'+sel.moveStart ('character', -textarea.value.length));
		//alert(getCaretPos(textarea));
		if (getCaretPos(textarea) == 0 && pos_textarea != 0 && is_sel_empty == 1)
		    sel.moveStart ('character',pos_textarea.start);
		//sel.moveStart ("character", -textarea.value.length);
		//sel.moveEnd ("character", -textarea.value.length);
		//sel.moveStart("character", pos_textarea);
		//alert(pos_textarea);
		//return;

	    }
	    var my_pos = pos_textarea;
	    var len= textarea.value.replace(/\r\n/g, "\n").length;
	    if (my_pos.start == my_pos.stop && sel_from_txtarea == 1)
		var txt_selected = '';
	    else
		var txt_selected = selText.text;
	    if (selText.text.replace(/\r\n/g, "\n").length == len)
	    {
		dump(my_pos);
		my_pos = {start: 0, stop: len};
	    }
	    if ((txt == 'color' || txt == 'size') && (param == null || param == ''))
		return;
	    if (txt == 'color' || txt == 'size' || (txt == 'url' && param != null && param != ''))
	    {
		var balise_size_l = ("[" + txt + "=" + param + "]").length;
		var balise_size_r = ("[/" + txt + "]").length;
		txt_to_insert = "[" + txt + "=" + param + "]" + txt_selected + "[/" + txt + "]";
	    }
	    else
	    {
		var balise_size_l = ("[" + txt + "]").length;
		var balise_size_r = ("[/" + txt + "]").length;
		txt_to_insert = "[" + txt + "]" + txt_selected + "[/" + txt + "]";
	    }
	    //alert('start:'+getStartPosition(textarea)+'\nstrop:'+getEndPosition(textarea));
	    //alert('txt_to_insert:'+txt_to_insert);
	    //alert(len+'\ncontent:'+textarea.value.replace(/\r\n/g, "\n"));
	    var t= {a: textarea.value.replace(/\r\n/g, "\n").substring(0, my_pos.start),
		  b: txt_to_insert,
		    c: textarea.value.replace(/\r\n/g, "\n").substring(my_pos.stop, len),
		    d: textarea.value.replace(/\r\n/g, "\n").substring(my_pos.start, my_pos.stop),
		    e: len, f: my_pos.stop };
	    dump(t);
	    if ((sel_from_txtarea == 0 && !is_sel_empty) || is_sel_empty == 1)
		textarea.value= t.a+t.b+t.d+t.c;
	    else
		textarea.value= t.a+t.b+t.c;
	    range = textarea.createTextRange();
	    var start_pos;
	    //alert('sel_from_txtarea'+sel_from_txtarea);
	    /*if (sel_from_txtarea == 1)
	    {
		start_pos = getStartPosition(textarea);
		if (is_sel_empty == 1)
		    start_pos = start_pos - balise_size_l - balise_size_r;
	    }
	    else
	    {
		if (pos_textarea <= textarea.value.length)
		    start_pos = pos_textarea;
		else
		    start_pos = 0;
		alert('start_pos:'+start_pos+'\npos_textarea:'+pos_textarea+'\nbalise l:'+balise_size_l+'\nbalise r:'+balise_size_r);
	    }*/

	    //alert('start_pos'+start_pos);
	    var txt_tmp = textarea.value.replace(/\r\n/g, "\n");
	    range.moveStart("character", my_pos.start + balise_size_l);
	    range.moveEnd("character", -txt_tmp.length + my_pos.start + txt_to_insert.replace(/\r\n/g, "\n").length - balise_size_r);
	    range.select();
	    pos_textarea.start = my_pos.start + balise_size_l;
	    pos_textarea.stop = my_pos.start + txt_to_insert.replace(/\r\n/g, "\n").length - balise_size_r - balise_size_l;
	    //dump(pos_textarea2);
	    //alert('new pos_textarea:'+pos_textarea);
	    //stored_sel.moveToElementText(textarea);
	    //stored_sel.setEndPoint('StartToStart',selText);
	    //dump(stored_sel);
	    //textarea.selectionStart = stored_sel.text.length - selText.text.length;
	    //textarea.selectionEnd = textarea.selectionStart + selText.text.length;
	    //alert(stored_sel.text.length);
	    //alert(textarea.selectionStart+'-'+textarea.selectionEnd);
	}
	else
	    sel.text = txt;
    }
    else
    {
	textarea.value = textarea.value + txt;
    }
    textarea.focus();
}

function getCaretPos(obj)
{
    obj.focus();

    if (current_textarea != obj.id)
    {
	current_textarea = obj.id;
	return (0);
    }
    if(obj.selectionStart)
	return obj.selectionStart; //Gecko
    else if (document.selection) //IE
    {
	var sel = document.selection.createRange();
	var clone = sel.duplicate();
	sel.collapse(true);
	clone.moveToElementText(obj);
	clone.setEndPoint('EndToEnd', sel);
	return clone.text.length;
    }
    return 0;
}


function getPosition(textarea)
{
    if(textarea.selectionStart || textarea.selectionStart == 0)
    {
	return {start:textarea.selectionStart, stop: textarea.selectionEnd} ;
    }
    if(document.selection)
    {
	var range = document.selection.createRange();
	var range_all = document.body.createTextRange();
	range_all.moveToElementText(textarea);
	var size = textarea.innerHTML.replace(/\r\n/g, "\n").length;
	var time = new Date();
	for (var sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0 && sel_start <= size; sel_start++)
	{
	    if((time - new Date()) * -1 > 3000)
		return {start: 0, stop: 0};
	    range_all.moveStart('character', 1);
	}
	for (var sel_end = size; range_all.compareEndPoints('EndToEnd', range) > 0; sel_end--)
	{
	    if((time - new Date()) * -1 > 3000)
		return {start: 0, stop: 0};
	    range_all.moveEnd('character', -1);
	}
	return { start: sel_start, stop: sel_end };
    }
    return {start: 0, stop: 0};
}

document.getElementById('intra_display_zone').vAlign='top';
document.getElementById('intra_display_zone').style.paddingTop='0';
document.getElementById('intra_display_zone').style.paddingRight='0';
document.getElementById('intra_display_zone').style.paddingLeft='0';

var currentPostRead = "";
var currentPostReadBg = "";
var currentPrivPostRead = "";
var currentPrivPostReadBg = "";
var tmpColor;

function setCurrentPostRead(id_new, method)
{
    if (currentPostRead != "" && document.getElementById(currentPostRead) != null)
    {
	document.getElementById(currentPostRead).style.backgroundColor = currentPostReadBg;
	document.getElementById(currentPostRead).onmouseover = function () {tmpColor = this.style.backgroundColor; this.style.backgroundColor = '#e6effe';};
	/*document.getElementById(curentPostRead).onmouseout = function () {this.style.backgroundColor = tmpColor;};*/
	document.getElementById(currentPostRead).onmouseout = function () {this.style.backgroundColor = tmpColor;};
    }
    if (document.getElementById(id_new) != null)
    {
	var reg = new RegExp("#[a-zA-Z0-9]{6}","gi");
	var regRGB = new RegExp("rgb\([0-9]{1,3},[0-9]{1,3},[0-9]{1,3}\)", "gi");
	currentPostRead = id_new;
	var res = reg.exec(document.getElementById(id_new).onmouseout);
	if (method == 'arrow')
	    currentPostReadBg = document.getElementById(id_new).style.backgroundColor;
	else
	{
	    if (res == null)
	    {
		res = regRGB.exec(document.getElementById(id_new).onmouseout);
		if (res != null)
		    currentPostReadBg = res[0];
		else
		    currentPostReadBg = tmpColor;
	    }
	    else
		currentPostReadBg = res[0];
	}
	document.getElementById(id_new).style.backgroundColor = "#90bee5";
	document.getElementById(id_new).onmouseover = '';
	document.getElementById(id_new).onmouseout = '';

	}
    else
    {
	currentPostRead = "";
	currentPostReadBg = "";
    }
}

function setCurrentPrivPostRead(id_new, method)
{
    if (currentPrivPostRead != "" && document.getElementById(currentPrivPostRead) != null)
    {
	document.getElementById(currentPrivPostRead).style.backgroundColor = currentPrivPostReadBg;
	document.getElementById(currentPrivPostRead).onmouseover = function () {tmpColor = this.style.backgroundColor; this.style.backgroundColor = '#e6effe';};
	/*document.getElementById(curentPostRead).onmouseout = function () {this.style.backgroundColor = tmpColor;};*/
	document.getElementById(currentPrivPostRead).onmouseout = function () {this.style.backgroundColor = tmpColor;};
    }
    if (document.getElementById(id_new) != null)
    {
	var reg = new RegExp("#[a-zA-Z0-9]{6}","gi");
	var regRGB = new RegExp("rgb\([0-9]{1,3},[0-9]{1,3},[0-9]{1,3}\)", "gi");
	currentPrivPostRead = id_new;
	var res = reg.exec(document.getElementById(id_new).onmouseout);
	if (method == 'arrow')
	    currentPrivPostReadBg = document.getElementById(id_new).style.backgroundColor;
	else
	{
	    if (res == null)
	    {
		res = regRGB.exec(document.getElementById(id_new).onmouseout);
		if (res != null)
		    currentPrivPostReadBg = res[0];
		else
		    currentPrivPostReadBg = tmpColor;
	    }
	    else
		currentPrivPostReadBg = res[0];
	}
	document.getElementById(id_new).style.backgroundColor = "#90bee5";
	document.getElementById(id_new).onmouseover = '';
	document.getElementById(id_new).onmouseout = '';

	}
    else
    {
	currentPrivPostRead = "";
	currentPrivPostReadBg = "";
    }
}

function showMenuPanel(id)
{
    current = document.getElementById(id);
    if (current)
    {
	current.style.display = 'block';
	if (id != 'menu_signature')
	    document.getElementById('menu_signature').style.display = 'none';
	if (id != 'menu_mail')
	    document.getElementById('menu_mail').style.display = 'none';
	if (id != 'menu_section' && document.getElementById('menu_section'))
	    document.getElementById('menu_section').style.display = 'none';
	if (id == 'menu_signature')
	    document.getElementById('menu_arrow').style.marginLeft = '15px';
	if (id == 'menu_mail')
	    document.getElementById('menu_arrow').style.marginLeft = '110px';
	if (id == 'menu_section' && document.getElementById('menu_section'))
	    document.getElementById('menu_arrow').style.marginLeft = '210px';
    }
}


function doRedirect(anchor)
{
    window.location = window.location.pathname + window.location.search + anchor;
}

function replySelection()
{
    var txt = "";
    if (window.getSelection)
    {
	//FF
	//txt = window.getSelection().toString();
//	dump(document.activeElement);
	if (document.activeElement &&
            (document.activeElement.tagName.toLowerCase () == "textarea" ||
             document.activeElement.tagName.toLowerCase () == "input"))
        {
            var text = document.activeElement.value;
            txt = text.substring (document.activeElement.selectionStart,
                                      document.activeElement.selectionEnd);
        }
        else
	{
	    txt = window.getSelection().toString();
	}


    }
    else if (document.getSelection)
    {
	txt = document.getSelection();
    }
    else if (document.selection)
    {
	//IE
	txt = document.selection.createRange().text;
    }
    return(txt.substr(0, 2000));
}

function dump(obj) {
    var out = '';
    for (var i in obj) {
        out += i + ": " + obj[i] + "\n";
    }

    alert(out);
}

function dump2(huhu, obj) {
    var out = '';
    for (var i in obj) {
        out += i + ": " + obj[i] + "\n";
    }

    huhu.value = out;
}

function getSel()
{
    var sel=null;
    if(typeof document.selection!="undefined" && document.selection && document.selection.type=="Text")
    {
	sel=document.selection;
    }
    else if(window.getSelection && window.getSelection().rangeCount > 0)
    {
	sel=window.getSelection();
    }
    return sel;
}

function majNewPostBySection(id_section)
{
    var newPost = document.getElementById('nb_new_by_section_'+id_section);
    var nbPost = parseInt(newPost.innerHTML);
    if (nbPost == 0)
	nbPost = 0;
    else
	nbPost = nbPost - 1;
    newPost.innerHTML = nbPost;
}

function expandPosts(id)
{
    var node = document.getElementById(id);
    if (typeof node == 'undefined')
	return;
    if (node.style.display == 'none')
	node.style.display = 'block';
    else
	node.style.display = 'none';
}

var c_n = function (val)
{
  val.chuck_norris = true;
  return val;
}

