// WYSWYG Script

//----------------------------------------------------------------------------------------------------------------------
// Variables

var cObjects = new Array();		// cached objects.

var elmStyles = new Array();
elmStyles = {
"wyswygelm_imgbutton_over" : [ "1px solid #AAAAAA", "#DDDDDD", "0px" ],
"wyswygelm_imgbutton_pushed" : [ "1px solid #AAAAAA", "#BBBBBB", "0px" ],
"wyswygelm_imgbutton_normal" : [ "", "", "1px" ]
};

var textarea;
var filepath

//----------------------------------------------------------------------------------------------------------------------
// retrieves objects.
function wyswyg_getObject(objectId) {
	if (typeof(cObjects[objectId]) == "undefined") {
		cObjects[objectId] = document.getElementById(objectId);
	}
	
	return cObjects[objectId];
}

//----------------------------------------------------------------------------------------------------------------------
// initialize font types.
function wyswyg_initFontTypes() {
	for (key in optFonts) {
		document.writeln('<option value="'+optFonts[key]+'">'+optFonts[key]+'</option>');
	}
}


//----------------------------------------------------------------------------------------------------------------------
// initialize font types.
function wyswyg_initFontSizes() {
	for (key in optSizes) {
		document.writeln('<option value="'+optSizes[key]+'">'+optSizes[key]+'</option>');
	}
}


//----------------------------------------------------------------------------------------------------------------------
// initialize font types.
function wyswyg_initFontColors() {
	for (key in optColors) {
		document.writeln('<option value="'+key+'" style="background-color:'+key+'">'+optColors[key]+'</option>');
	}
}

//----------------------------------------------------------------------------------------------------------------------
// initialize code controls.
function wyswyg_init(path) {
	filepath = path;
	var divArray = wyswyg_getObject("wyswyg_toolbar").getElementsByTagName("div");
	
	textarea = wyswyg_getObject("wyswyg_message");
	
	for (var i  = 0; i < divArray.length; i++) {
		var elm = divArray[i];
		switch (elm.className) {
			case "wyswyg_imagebutton": 
				elm.onmouseover = elm.onmouseout = elm.onmouseup = elm.onmousedown = wyswyg_eventHandler;
				wyswyg_stylize(elm, "imgbutton", "normal");
				break;
		}
	}
}

//----------------------------------------------------------------------------------------------------------------------
// prepares event object.
function wyswyg_prepareEventObject(e) {
	if (!e) {
		window.event.returnValue = false;
		window.event.cancelBubble = true;
		return window.event;
	} else {
		e.stopPropagation();
		e.preventDefault();
		return e;
	}
}


//----------------------------------------------------------------------------------------------------------------------
// handles events.
function wyswyg_eventHandler(e, elm) {
	e = wyswyg_prepareEventObject(e);
	
	switch(e.type) {
		case "mousedown":
			wyswyg_stylize(this, "imgbutton", "pushed");
			break;
		case "mouseover":
		case "mouseup":
			wyswyg_stylize(this, "imgbutton", "over");
			break;
		default:
			wyswyg_stylize(this, "imgbutton", "normal");
	}
}


//----------------------------------------------------------------------------------------------------------------------
// stylizes elements by assigning styles to them.
function wyswyg_stylize(elm, elmType, elmState) {

	var elmStyle = "wyswygelm_" + elmType + "_" + elmState;
	
	elm.style.border = elmStyles[elmStyle][0];
	elm.style.backgroundColor = elmStyles[elmStyle][1];
	elm.style.padding = elmStyles[elmStyle][2];
}

//----------------------------------------------------------------------------------------------------------------------
// retireves BB code
function wyswyg_getCode(code, paramVal) {
	var textChange = "";
	paramVal = (paramVal != ''?'='+paramVal:'');
	
	textarea.focus();
	if (typeof(document.selection) == "object") {
		var rng = document.selection.createRange();
		textChange = rng.text;
		var newLine = ((code == 'LEFT' || code == 'RIGHT' || code == 'CENTER' || code == 'INDENT') ? '\n':'');
		rng.text = newLine + '['+code+paramVal+']'+textChange+'[/'+code+']' + newLine;
	} else {
		
		var textStart = (textarea.value).substring(0, textarea.selectionStart);
		var textEnd = (textarea.value).substring(textarea.selectionStart + (textarea.selectionEnd - textarea.selectionStart), textarea.value.length);
		if (textarea.selectionEnd > 0) {
			textChange = (textarea.value).substring(textarea.selectionStart, textarea.selectionEnd);
		}
		
		var newLine = ((code == 'LEFT' || code == 'RIGHT' || code == 'CENTER' || code == 'INDENT') ? '\n':'');
		textarea.value=textStart + newLine + '['+code+paramVal+']'+textChange+'[/'+code+']' + newLine + textEnd;
	}
	return false;
}

//----------------------------------------------------------------------------------------------------------------------
// retireves BB code for list
function wyswyg_getListCode(code) {
	var textChange = "";
	var textArray = new Array();
	
	if (typeof(document.selection) == "object") {
		textarea.focus();
		var rng = document.selection.createRange();
		textChange = rng.text;
		
		textArray = textChange.split('\n');
		textChange = "";
		for (stringLine in textArray) {
			textChange += '[*]'+ textArray[stringLine]+'[/*]\n';
		}
		rng.text = '\n['+code+']\n'+textChange+'[/'+code+']\n';
	} else {
		var textStart = (textarea.value).substring(0, textarea.selectionStart);
		var textEnd = (textarea.value).substring(textarea.selectionStart + (textarea.selectionEnd - textarea.selectionStart), textarea.value.length);
		if (textarea.selectionEnd > 0) {
			textChange = (textarea.value).substring(textarea.selectionStart, textarea.selectionEnd);
		}
		
		textArray = textChange.split('\n');
		textChange = "";
		for (stringLine in textArray) {
			textChange += '[*]'+ textArray[stringLine]+'[/*]\n';
		}
		
		textarea.value=textStart + '['+code+']\n'+textChange+'[/'+code+']\n' + textEnd;
	}
	return false;
}

//----------------------------------------------------------------------------------------------------------------------
// Shows smiles window.
function wyswyg_showSmilesList() {
	var smilesList = wyswyg_getObject("wyswyg_smilesList");
	
	if (smilesList.style.visibility == 'visible') {
		smilesList.style.visibility = 'hidden';
	} else {
		smilesList.style.visibility = 'visible';
	}
}

//----------------------------------------------------------------------------------------------------------------------
// Sets font
function wyswyg_setFontParams(obj, code) {
	if(obj.selectedIndex > 0) {
		wyswyg_getCode(code, obj.options[obj.selectedIndex].value);
	}
}

//----------------------------------------------------------------------------------------------------------------------
// Shows preview window.
function wyswyg_showPreview() {
	var previewDiv = wyswyg_getObject("wyswyg_preview");
	
	if (textarea.value.length > 0) {
		if (previewDiv.style.visibility == 'visible') {
			previewDiv.style.visibility = 'hidden';
		} else {
			var previewArea = wyswyg_getObject("wyswyg_previewarea");
			//previewArea.posTop = 100;
			//previewArea.style.marginTop = 100;
			//previewArea.pixelTop = 100;
			//previewArea.offsetY = 100;
			previewArea.innerHTML = wyswyg_parseCode(wyswyg_stripHTML(textarea.value));
			previewDiv.style.visibility = 'visible';
		}
	}
}

//----------------------------------------------------------------------------------------------------------------------
// Closes preview window.
function wyswyg_closePreview() {
	var previewDiv = wyswyg_getObject("wyswyg_preview");
	previewDiv.style.visibility = 'hidden';
}

//----------------------------------------------------------------------------------------------------------------------
// removes all HTML tags.
function wyswyg_stripHTML(text) {
			text = text.replace(/</gim, '&#60;');
			text = text.replace(/>/gim, '&#62;');
	return text;		
}

//----------------------------------------------------------------------------------------------------------------------
// Parses params.
function wyswyg_parseCode(text) {
			text = text.replace(/\n/gim, '</br>');
			text = text.replace(/\[(\/)?BOLD\]/gim, '<$1b>');
			text = text.replace(/\[(\/)?ITALIC\]/gim, '<$1i>');
			text = text.replace(/\[(\/)?UNDERLINE\]/gim, '<$1u>');
			text = text.replace(/\[JUSTIFY=([^\]]*)\](.*?)\[\/JUSTIFY\]/gim, '<div align="$1">$2</div>');
			text = text.replace(/\[(\/)?INDENT\]/gim, '<$1blockquote>');
			text = text.replace(/\[(\/)?ULIST\]\s*(?:<\/br>)?/gim, '<$1ul>');
			text = text.replace(/\[(\/)?OLIST\]\s*(?:<\/br>)?/gim, '<$1ol>');
			text = text.replace(/\[(\/)?\*\]\s*(<\/br>)?/gim, '<$1li>');
			
			text = text.replace(/\[IMG=([^\]]*)\](.*?)\[\/IMG\]/gim, '<img src="$1" alt="$2"/>');
			text = text.replace(/\[URL=([^\]]*)\](.*?)\[\/URL\]/gim, '<a href="$1">$2</a>');
			text = text.replace(/\[EURL=([^\]]*)\](.*?)\[\/EURL\]/gim, '<a href="mailto:$1">$2</a>');
			text = text.replace(/\[FONT=([^\]]*)\](.*?)\[\/FONT\]/gim, '<font face="$1">$2</font>');
			text = text.replace(/\[SIZE=([^\]]*)\](.*?)\[\/SIZE\]/gim, '<font size="$1">$2</font>');
			text = text.replace(/\[COLOR=([^\]]*)\](.*?)\[\/COLOR\]/gim, '<font color="$1">$2</font>');
			
			//

			// replacing smiles
			text = text.replace(/:lol:/gim, '<img src="'+filepath+'img/sml_laught_s.gif"/>');
			text = text.replace(/:\)/gim, '<img src="'+filepath+'img/sml_happy_s.gif"/>');
			text = text.replace(/;\)/gim, '<img src="'+filepath+'img/sml_hey_s.gif"/>');
			text = text.replace(/:cool:/gim, '<img src="'+filepath+'img/sml_cool_s.gif"/>');

			text = text.replace(/:saint:/gim, '<img src="'+filepath+'img/sml_saint_s.gif"/>');
			text = text.replace(/:devil:/gim, '<img src="'+filepath+'img/sml_devil_s.gif"/>');
			text = text.replace(/:love:/gim, '<img src="'+filepath+'img/sml_loving_s.gif"/>');
			text = text.replace(/:super:/gim, '<img src="'+filepath+'img/sml_super_s.gif"/>');

			text = text.replace(/:~/gim, '<img src="'+filepath+'img/sml_confused_s.gif"/>');
			text = text.replace(/:cry:/gim, '<img src="'+filepath+'img/sml_crying_s.gif"/>');
			text = text.replace(/:\(/gim, '<img src="'+filepath+'img/sml_sad_s.gif"/>');
			text = text.replace(/:\[/gim, '<img src="'+filepath+'img/sml_unhappy_s.gif"/>');
			
			text = text.replace(/:,/gim, '<img src="'+filepath+'img/sml_hmm_s.gif"/>');
			text = text.replace(/:0/gim, '<img src="'+filepath+'img/sml_ohh_s.gif"/>');
			text = text.replace(/:80:/gim, '<img src="'+filepath+'img/sml_scared_s.gif"/>');
			text = text.replace(/:P/gim, '<img src="'+filepath+'img/sml_tongue_s.gif"/>');
			
			text = text.replace(/:sick:/gim, '<img src="'+filepath+'img/sml_sick_s.gif"/>');
			text = text.replace(/:here:/gim, '<img src="'+filepath+'img/sml_here_s.gif"/>');
			text = text.replace(/:think:/gim, '<img src="'+filepath+'img/sml_thinking_s.gif"/>');
			text = text.replace(/:idea:/gim, '<img src="'+filepath+'img/sml_idea_s.gif"/>');
			
	return text;		
}


//----------------------------------------------------------------------------------------------------------------------
// Adds BB smole
function wyswyg_addSmile(code) {
	var textChange = "";
	
	textarea.focus();
	if (typeof(document.selection) == "object") {
		var rng = document.selection.createRange();
		textChange = rng.text;
		rng.text = textChange + code;
	} else {
		
		var textStart = (textarea.value).substring(0, textarea.selectionStart);
		var textEnd = (textarea.value).substring(textarea.selectionStart + (textarea.selectionEnd - textarea.selectionStart), textarea.value.length);
		if (textarea.selectionEnd > 0) {
			textChange = (textarea.value).substring(textarea.selectionStart, textarea.selectionEnd);
		}
		textarea.value=textStart + textChange + code + textEnd;
	}
	
	var smilesList = wyswyg_getObject("wyswyg_smilesList");
	smilesList.style.visibility = 'hidden';
	
}
