// Cross Browser selectionStart/selectionEnd
// Version 0.1
// Copyright (c) 2005 KOSEKI Kengo
// 
// This script is distributed under the MIT licence.
// http://www.opensource.org/licenses/mit-license.php

function Selection(textareaElement) {
    this.element = textareaElement;
}

Selection.prototype.create = function() {
    if (document.selection != null && this.element.selectionStart == null) {
        return this._ieGetSelection();
    } else {
        return this._mozillaGetSelection();
    }
}

Selection.prototype._mozillaGetSelection = function() {
    return { 
        start: this.element.selectionStart, 
        end: this.element.selectionEnd 
    };
}

Selection.prototype._ieGetSelection = function() {
    this.element.focus();

    var range = document.selection.createRange();
    var bookmark = range.getBookmark();

    var contents = this.element.value;
    var originalContents = contents;
    var marker = this._createSelectionMarker();
    while(contents.indexOf(marker) != -1) {
        marker = this._createSelectionMarker();
    }
    var selection = range.text;

    var parent = range.parentElement();
    if (parent == null || parent.type != "textarea") {
        return { start: 0, end: 0 };
    }
    range.text = marker + range.text + marker;
    contents = this.element.value;

    var result = {};
    result.start = contents.indexOf(marker);
    contents = contents.replace(marker, "");
    result.end = contents.indexOf(marker);

    this.element.value = originalContents;
    range.moveToBookmark(bookmark);
    range.select();

    return result;
}

Selection.prototype._createSelectionMarker = function() {
    return "##SELECTION_MARKER_" + Math.random() + "##";
}


	function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

var cheights=new Array();
function expandcontentsarea(tname,esize){
		if(cheights[tname]){
		  cheights[tname]+=esize;
		}else{
		  cheights[tname]=10+esize;
		}
		if(cheights[tname] < 5){
		cheights[tname]=cheights[tname]-esize;
		return;
		}
		var val=cheights[tname] + "em";
if(document.all){
		document.all[tname].style.height=val;
		}else{
		document.getElementById(tname).style.height=val;
		}
}

function openImagePopup(targetid){
var popurl="picture.php?targetid=" + targetid;
winpops=window.open(popurl,"images","width=360,height=550,menubar=no,toolbar=no,location=no,directories=no,status=no,scrollbars=yes,resizable=yes");
}

function deleteImage(targetid){
	document.getElementById("pictures" + targetid).src="imgs/noimage.gif";
	document.cform["picnames" + targetid ].value="";
}

function buttonBold(targetid){
	var selection = new Selection(document.getElementById("contents"+targetid));
	var s = selection.create();
  var area=document.getElementById("contents"+targetid);
  area.value=area.value.substr(0,s.start) + "<strong>" + area.value.substr(s.start,s.end-s.start) + "</strong>" + area.value.substr(s.end);

//set cursor
var insertct=17;
if(area.createTextRange){
	var range = area.createTextRange();
	area.focus();
	range.move('character', s.end+ insertct);
	range.select();
}else{
	area.focus();
	area.setSelectionRange(s.end+insertct,s.end+insertct);
}
	//alert("start:" + s.start + ", end:" + s.end);
}
function buttonDel(targetid){
	var selection = new Selection(document.getElementById("contents"+targetid));
	var s = selection.create();
  var area=document.getElementById("contents"+targetid);
  area.value=area.value.substr(0,s.start) + "<del>" + area.value.substr(s.start,s.end-s.start) + "</del>" + area.value.substr(s.end);

//set cursor
var insertct=11;
if(area.createTextRange){
	var range = area.createTextRange();
	area.focus();
	range.move('character', s.end+ insertct);
	range.select();
}else{
	area.focus();
	area.setSelectionRange(s.end+insertct,s.end+insertct);
}
	//alert("start:" + s.start + ", end:" + s.end);
}
function buttonULine(targetid){
	var selection = new Selection(document.getElementById("contents"+targetid));
	var s = selection.create();
  var area=document.getElementById("contents"+targetid);
  area.value=area.value.substr(0,s.start) + "<ins>" + area.value.substr(s.start,s.end-s.start) + "</ins>" + area.value.substr(s.end);

//set cursor
var insertct=11;
if(area.createTextRange){
	var range = area.createTextRange();
	area.focus();
	range.move('character', s.end+ insertct);
	range.select();
}else{
	area.focus();
	area.setSelectionRange(s.end+insertct,s.end+insertct);
}
	//alert("start:" + s.start + ", end:" + s.end);
}
function buttonReadMore(targetid){
	var selection = new Selection(document.getElementById("contents"+targetid));
	var s = selection.create();
  var area=document.getElementById("contents"+targetid);
  area.value=area.value.substr(0,s.start) + "\n<readmore />\n" + area.value.substr(s.start);

//set cursor
var insertct=14;
if(area.createTextRange){
	var range = area.createTextRange();
	area.focus();
	range.move('character', s.end+ insertct);
	range.select();
}else{
	area.focus();
	area.setSelectionRange(s.end+insertct,s.end+insertct);
}
	//alert("start:" + s.start + ", end:" + s.end);
}
function buttonItalic(targetid){
	var selection = new Selection(document.getElementById("contents"+targetid));
	var s = selection.create();
  var area=document.getElementById("contents"+targetid);
  area.value=area.value.substr(0,s.start) + "<em>" + area.value.substr(s.start,s.end-s.start) + "</em>" + area.value.substr(s.end);

//set cursor
var insertct=9;
if(area.createTextRange){
	var range = area.createTextRange();
	area.focus();
	range.move('character', s.end+ insertct);
	range.select();
}else{
	area.focus();
	area.setSelectionRange(s.end+insertct,s.end+insertct);
}
	//alert("start:" + s.start + ", end:" + s.end);
}

  function getPos( elm ){ 
    var target = elm; 
    var pos = new function(){ this.x = 0; this.y = 0; } 
      while( target ){ 
      pos.x += target.offsetLeft; 
      pos.y += target.offsetTop; 
      target = target.offsetParent; 
    } 
    return pos;
  }

var currentid=0;
var currentsel;


function buttonLink(targetid){
  var linkbutton=document.getElementById("contents"+targetid);
	var linklayer=document.getElementById("linklayer");
  var pos=getPos(linkbutton);
//alert(pos.y);
  linklayer.style.top=(pos.y-20) + "px";
  linklayer.style.left=(pos.x+50) + "px";
	linklayer.style.visibility="visible";

	//remember target id
	currentid=targetid;

	var selection = new Selection(document.getElementById("contents"+targetid));
	var s = selection.create();
	//remember target selection
	currentsel=new Object();
	currentsel.start=s.start;
	currentsel.end=s.end;
}
function buttonImg(targetid){
  var ct=document.getElementById("contents"+targetid);
	var imglayer=document.getElementById("imglayer");
  var pos=getPos(ct);

  imglayer.style.top=(pos.y-20) + "px";
  imglayer.style.left=(pos.x+50) + "px";
	imglayer.style.visibility="visible";

	//remember target id
	currentid=targetid;

	var selection = new Selection(document.getElementById("contents"+targetid));
	var s = selection.create();
	//remember target selection
	currentsel=new Object();
	currentsel.start=s.start;
	currentsel.end=s.end;
}
function buttonSize(targetid){
  var ct=document.getElementById("contents"+targetid);
	var sizelayer=document.getElementById("sizelayer");
  var pos=getPos(ct);

  sizelayer.style.top=(pos.y-20) + "px";
  sizelayer.style.left=(pos.x+50) + "px";
	sizelayer.style.visibility="visible";

	//remember target id
	currentid=targetid;

	var selection = new Selection(document.getElementById("contents"+targetid));
	var s = selection.create();
	//remember target selection
	currentsel=new Object();
	currentsel.start=s.start;
	currentsel.end=s.end;
}
function buttonColor(targetid){
  var ct=document.getElementById("contents"+targetid);
	var colorlayer=document.getElementById("colorlayer");
  var pos=getPos(ct);

  colorlayer.style.top=(pos.y-20) + "px";
  colorlayer.style.left=(pos.x+50) + "px";
	colorlayer.style.visibility="visible";

	//remember target id
	currentid=targetid;

	var selection = new Selection(document.getElementById("contents"+targetid));
	var s = selection.create();
	//remember target selection
	currentsel=new Object();
	currentsel.start=s.start;
	currentsel.end=s.end;
}

function closeLayer(target){
  var layer=document.getElementById(target);
	layer.style.visibility="hidden";

}

function insertLink(){
	var targetid=currentid;
	var s=currentsel;

	var urltext=document.getElementById("linktoolurl");
	var url=urltext.value;

  var area=document.getElementById("contents"+targetid);
  area.value=area.value.substr(0,s.start) + "<a href='"+url+"'>" + area.value.substr(s.start,s.end-s.start) + "</a>" + area.value.substr(s.end);

//set cursor
var inserttext="<a href='"+url+"'></a>";
var insertct=inserttext.length;
if(area.createTextRange){
	var range = area.createTextRange();
	area.focus();
	range.move('character', s.end+ insertct);
	range.select();
}else{
	area.focus();
	area.setSelectionRange(s.end+insertct,s.end+insertct);
}

	closeLayer("linklayer");
}

function insertImg(){
	var targetid=currentid;
	var s=currentsel;

	var urltext=document.getElementById("imgtoolurl");
	var url=urltext.value;

  var area=document.getElementById("contents"+targetid);
  area.value=area.value.substr(0,s.start) + "<img src='"+url+"' />" + area.value.substr(s.start);

//set cursor
var inserttext="<img src='"+url+"' />";
var insertct=inserttext.length;
if(area.createTextRange){
	var range = area.createTextRange();
	area.focus();
	range.move('character', s.end+ insertct);
	range.select();
}else{
	area.focus();
	area.setSelectionRange(s.end+insertct,s.end+insertct);
}

	closeLayer("imglayer");
}

function insertSize(){
	var targetid=currentid;
	var s=currentsel;

	var sizetool=document.getElementById("sizetool");
	var size=sizetool.value;

  var area=document.getElementById("contents"+targetid);
  area.value=area.value.substr(0,s.start) + "<font style='font-size:"+size+"'>" + area.value.substr(s.start,s.end-s.start) + "</font>" + area.value.substr(s.end);

//set cursor
var inserttext="<font style='font-size:"+size+"'></font>";
var insertct=inserttext.length;
if(area.createTextRange){
	var range = area.createTextRange();
	area.focus();
	range.move('character', s.end+ insertct);
	range.select();
}else{
	area.focus();
	area.setSelectionRange(s.end+insertct,s.end+insertct);
}

	closeLayer('sizelayer');
}

function insertColor(color){
	var targetid=currentid;
	var s=currentsel;


  var area=document.getElementById("contents"+targetid);
  area.value=area.value.substr(0,s.start) + "<font style='color:#"+color+"'>" + area.value.substr(s.start,s.end-s.start) + "</font>" + area.value.substr(s.end);

//set cursor
var inserttext="<font style='color:#"+color+"'></font>";
var insertct=inserttext.length;
if(area.createTextRange){
	var range = area.createTextRange();
	area.focus();
	range.move('character', s.end+ insertct);
	range.select();
}else{
	area.focus();
	area.setSelectionRange(s.end+insertct,s.end+insertct);
}

	closeLayer('colorlayer');
}


function setColorValue(value){
  var cv=document.getElementById("colorvalue");
	cv.innerHTML="#" + value;
}

function setCheckBoxAll(formName, checkboxName, original_checkbox) {
	var bool = 'document.' + formName + '.elements["' + original_checkbox + '"].checked';
	if ('document.' + formName + '.elements["' + checkboxName + '"]') {
		if (eval('document.' + formName + '.elements["' + checkboxName + '"].length')) {
			for(i = 0; i< eval('document.' + formName + '.elements["' + checkboxName + '"].length'); i++) {
				eval('document.' + formName + '.elements["' + checkboxName + '"][' + i + '].checked = ' + bool);
			}
		} else {
			eval('document.' + formName + '.elements["' + checkboxName + '"].checked = ' + bool);
		}
	}
}
