/*----------------------------------------------------------------------------\
'   File:			HtmlEdit.js
'	Copyright (C):	2002, IconMedialab DK (http://www.iconmedialab.dk)
'
'	Description:	
'	Dependencies:	
'
'Version			1.3
'	Author:			Jon Emil Sørensen (emil.sorensen@iconmedialab.dk)
'	Company:		QuadroS (http://www.QuadroS.dk)
'	Date:			2003-01-15
\----------------------------------------------------------------------------*/

//window.showModalDialog()
var iml_cHtmlEdit_WYSIWYG			=	1
var iml_cHtmlEdit_HTML				=	2


function iml_cHtmlEdit(_name, _scriptVarName){
	
	this.name = _name;
	this.scriptVarName = _scriptVarName;
	this.view = document.getElementById(_name + '_View');	
	this.viewMode = 1;
	this.toolbar = eval(_name + '_Toolbar');
//	this.bottomToolbar = eval('document.all.' + _name + '_BottomToolbar');
	this.bottomToolbar = eval(document.getElementById(_name + '_BottomToolbar'));
	//alert(this.bottomToolbar);
	//this.colourInlineDialogBox = eval('document.all.' + _name + '_ColourDialogBox')
	this.colourInlineDialogBox = eval(document.getElementById(_name + '_ColourDialogBox'));
	this.colourCommand = ''
	this.currentColour = null;	
	this.colourDialogBox = new iml_cHtmlEditDialogBox(null, null, null);
	this.imageDialogBox = new iml_cHtmlEditDialogBox(null, null, null);
	this.hyperlinkDialogBox = new iml_cHtmlEditDialogBox(null, null, null);
	this.currentButton = null;
	
	//this.inputField = eval('document.all.' + _name );
	//eval(document.getElementById('p_strDescription_View')
	this.inputField = eval(document.getElementById(_name));
	//alert(this.inputField);
	
	iml_cHtmlEdit.prototype.blur = iml_cHtmlEdit_blur;
	iml_cHtmlEdit.prototype.buttonDown = iml_cHtmlEdit_buttonDown;
	iml_cHtmlEdit.prototype.buttonUp = iml_cHtmlEdit_buttonUp;
	iml_cHtmlEdit.prototype.buttonMouseOver = iml_cHtmlEdit_buttonMouseOver;
	iml_cHtmlEdit.prototype.buttonMouseOut = iml_cHtmlEdit_buttonMouseOut;
	iml_cHtmlEdit.prototype.buttonMouseDown = iml_cHtmlEdit_buttonMouseDown;
	iml_cHtmlEdit.prototype.buttonMouseUp = iml_cHtmlEdit_buttonMouseUp;
	iml_cHtmlEdit.prototype.buttonSelectionChange = iml_cHtmlEdit_buttonSelectionChange;
	iml_cHtmlEdit.prototype.doCmd = iml_cHtmlEdit_doCmd;
	iml_cHtmlEdit.prototype.doHyperlink = iml_cHtmlEdit_doHyperlink;
	iml_cHtmlEdit.prototype.doImage = iml_cHtmlEdit_doImage;
//	iml_cHtmlEdit.prototype.doSelectionChange = iml_cHtmlEdit_doSelectionChange;
	iml_cHtmlEdit.prototype.doToggleView = iml_cHtmlEdit_doToggleView;
	iml_cHtmlEdit.prototype.focus = iml_cHtmlEdit_focus;
	iml_cHtmlEdit.prototype.getCurrentColour = iml_cHtmlEdit_getCurrentColour	
	iml_cHtmlEdit.prototype.getCurrentHyperlink = iml_cHtmlEdit_getCurrentHyperlink	
	iml_cHtmlEdit.prototype.getHtml = iml_cHtmlEdit_getHtml;
	iml_cHtmlEdit.prototype.getViewBody = iml_cHtmlEdit_getViewBody
	iml_cHtmlEdit.prototype.hidePopUps = iml_cHtmlEdit_hidePopUps;
	iml_cHtmlEdit.prototype.setColour = iml_cHtmlEdit_setColour;
	iml_cHtmlEdit.prototype.setHtml = iml_cHtmlEdit_setHtml;
	iml_cHtmlEdit.prototype.showBackgroundColourDialogBox = iml_cHtmlEdit_showBackgroundColourDialogBox;
	iml_cHtmlEdit.prototype.showForegroundColourDialogBox = iml_cHtmlEdit_showForegroundColourDialogBox;
	iml_cHtmlEdit.prototype.syncButtons = iml_cHtmlEdit_syncButtons;
	iml_cHtmlEdit.prototype.syncHtmlSource = iml_cHtmlEdit_syncHtmlSource;
}
function iml_cHtmlEdit_blur(){
	this.view.blur();
}
function iml_cHtmlEdit_buttonMouseOver(_cmd){
	_btn = eval(document.getElementById(this.name + '_' + _cmd + 'Button'))	
	_btn.className = 'ButtonMouseOver';	
	this.currentButton = _cmd;
}
function iml_cHtmlEdit_buttonMouseOut(_cmd){
	_btn = eval(document.getElementById(this.name + '_' + _cmd + 'Button'));
	/*if (this.view.contentWindow.document.queryCommandSupported(_cmd)){
		if (this.view.contentWindow.document.queryCommandState(_cmd)) this.buttonDown(_btn);
		else this.buttonUp(_btn);
	}
	else{
		if (_cmd == 'toggleview'){
			if (this.viewMode == iml_cHtmlEdit_HTML) this.buttonDown(_btn);
			else this.buttonUp(_btn);
		}
		if (_cmd == 'closeColourDialogBox'){
			this.buttonUp(_btn);		
		}
	}*/
	this.buttonUp(_btn);
//	alert('nutton');
	this.currentButton = null;
}
function iml_cHtmlEdit_buttonMouseDown(_cmd){
	_btn = eval('document.all.' + this.name + '_' + _cmd + 'Button')
	this.buttonDown(_btn);
}
function iml_cHtmlEdit_buttonMouseUp(_cmd){
}	
function iml_cHtmlEdit_buttonSelectionChange(_cmd){
	_btn = eval('document.all.' + this.name + '_' + _cmd + 'Button')
	//alert(_btn);
	if (_btn){
		try{	//When deleing an image sometimes an unimportant error is thrown
			if (this.view.contentWindow.document.queryCommandState(_cmd)){
				if (this.currentButton == _cmd) {this.buttonMouseOver(_cmd);}
				else {this.buttonDown(_btn);}
			}
			else{
				if (this.currentButton == _cmd) {this.buttonMouseOver(_cmd);}
				else {this.buttonUp(_btn);}
			}
		}
		catch(e){}
	}
}
function iml_cHtmlEdit_buttonDown(_btn){
	_btn.className = 'ButtonSelected';
}
function iml_cHtmlEdit_buttonUp(_btn){
	_btn.className = 'Button';	
}
function iml_cHtmlEdit_doCmd(_cmd, _interface, _value){
	this.view.focus();
	this.view.contentWindow.document.execCommand(_cmd, _interface == 'undefined' ? false : _interface, _value == 'undefined' ? null : _value);
	this.syncButtons();
	this.syncHtmlSource();
}
function iml_cHtmlEdit_doHyperlink(){
	var _interface = true;
	var _value = null;

	if (this.hyperlinkDialogBox.url != null){
		this.hyperlinkDialogBox.show();
		_value = this.hyperlinkDialogBox.returnValue;
		_interface = false;
	}
	this.doCmd('createlink', _interface, _value);
}
function iml_cHtmlEdit_doImage(){
	var _interface = true;
	var _value = null;

	if (this.imageDialogBox.url != null){
		this.imageDialogBox.show();
		_value = this.imageDialogBox.returnValue;
		_interface = false;
	}
	if (_value != null) {
		var _textRange = this.view.contentWindow.document.selection.createRange();
		this.doCmd('insertimage');
		var _imageTag = _textRange.parentElement()
		_imageTag.outerHTML = _value;
	}
}
function iml_cHtmlEdit_doToggleView(){
	var _html, _text, _body;
	
	_body = this.getViewBody();
	if (this.viewMode == iml_cHtmlEdit_WYSIWYG){
		_html = this.getHtml();
		_body.innerText = _html;

		if (this.toolbar) this.toolbar.style.display = 'none';
		if (this.bottomToolbar) this.bottomToolbar.style.display = 'none';
		this.viewMode = iml_cHtmlEdit_HTML;
		this.focus();
	}
	else{
		_text = _body.innerText;
		_body.innerHTML = _text;
		
		if (this.toolbar) this.toolbar.style.display = 'block';
		if (this.bottomToolbar) this.bottomToolbar.style.display = 'block';
		this.viewMode = iml_cHtmlEdit_WYSIWYG;
		this.focus();
	}			
}
function iml_cHtmlEdit_focus(){
	try{
		this.view.focus();	
	}
	catch(e){return('');}
}
function iml_cHtmlEdit_getCurrentColour(_cmd){
	var _colour, _tmp;
	try{
		if (_cmd == undefined) _cmd = this.colourCommand;
		_tmp = this.view.contentWindow.document.queryCommandValue(_cmd).toString(16)
		_colour = '';
		for (i = _tmp.length - 1; i >= 0; i--){
			_colour += _tmp.charAt(i);
		}
		for (i = _colour.length; i < 6; i++){_colour += '0';}
		return('#' + _colour.toUpperCase());
	}
	catch(e){return('');}
}
function iml_cHtmlEdit_getCurrentHyperlink(){
	return(this.view.contentWindow.document.queryCommandValue('createlink'))
}
function iml_cHtmlEdit_getCurrentImage(){
	return(this.view.contentWindow.document.queryCommandValue('insertimage'))
}
function iml_cHtmlEdit_getHtml(){
	
	try{
		var _html, _body;		
		_body = this.getViewBody();
		if (this.viewMode == iml_cHtmlEdit_HTML){
			// Must toggle the view to make sure that the HTML is valid.
			// This means that eg. invalid tags are removed
			// It's recommended to check the viewMode before getting the HTML
			// and inform the user that he has to switch to WYSIWYG mode before proceding
			//this.doToggleView();
			//_html = _body.innerHTML;
			//this.doToggleView();			
			_html = _body.innerText;			
		}
		else{			
			_html = _body.innerHTML;
		}
		return(_html);
	}
	catch(e){return('');}
}
function iml_cHtmlEdit_getViewBody(){			
	return(this.view.contentWindow.document.body);
}
function iml_cHtmlEdit_hidePopUps(){
	if (this.colourDialogBox.url == null || this.colourDialogBox.url == ''){
		this.colourInlineDialogBox.style.display = 'none';
		this.focus()
	}
}
function iml_cHtmlEdit_setColour(_colour){
	if (this.colourDialogBox.url == null || this.colourDialogBox.url == ''){
		this.colourInlineDialogBox.style.display = 'none';
	}
	this.focus();
	this.view.contentWindow.document.execCommand(this.colourCommand, false, _colour);
	this.syncHtmlSource();
}
function iml_cHtmlEdit_setHtml(_html){
	try{
		var _body;				
		_body = this.getViewBody();				
		if (this.viewMode == iml_cHtmlEdit_HTML) _body.innerText = _html;					
		else 	_body.innerHTML = _html;
		this.inputField.value = _html;		
	}
	catch(e){
		// This is done because the loading of the html from time to time will fail
		if (e.number == -2146823281) window.setTimeout(this.scriptVarName + '.setHtml(\'' + _html + '\')', 500);
	}
}
function iml_cHtmlEdit_showBackgroundColourDialogBox(_btn){
	this.colourCommand = 'BackColor';

	if (this.colourDialogBox.url == null || this.colourDialogBox.url == ''){
		var _left = window.event.clientX - window.event.offsetX
		var _top = window.event.clientY - window.event.offsetY + _btn.offsetHeight //+ 2
		this.colourInlineDialogBox.style.pixelLeft = _left
		this.colourInlineDialogBox.style.pixelTop = _top
		this.colourInlineDialogBox.style.display = 'block'
		window.event.cancelBubble = true;
		this.colourInlineDialogBox.focus();
	}
	else{
		this.colourDialogBox.show()
		if (this.colourDialogBox.returnValue != null) this.setColour(this.colourDialogBox.returnValue)
	}
}
function iml_cHtmlEdit_showForegroundColourDialogBox(_btn){
	this.colourCommand = 'ForeColor';
	
	if (this.colourDialogBox.url == null || this.colourDialogBox.url == ''){
		_left = window.event.clientX - window.event.offsetX
		_top = window.event.clientY - window.event.offsetY + _btn.offsetHeight //+ 2
		this.colourInlineDialogBox.style.pixelLeft = _left
		this.colourInlineDialogBox.style.pixelTop = _top
		this.colourInlineDialogBox.style.display = 'block'
		window.event.cancelBubble = true;
		this.colourInlineDialogBox.focus();
	}
	else{
		this.colourDialogBox.show()
		if (this.colourDialogBox.returnValue != null) this.setColour(this.colourDialogBox.returnValue)
	}
}
function iml_cHtmlEdit_syncButtons(){
	this.buttonSelectionChange('bold');
	this.buttonSelectionChange('italic');
	this.buttonSelectionChange('underline');
	this.buttonSelectionChange('justifyleft');
	this.buttonSelectionChange('justifycenter');
	this.buttonSelectionChange('justifyright');
	this.buttonSelectionChange('outdent');
	this.buttonSelectionChange('indent');
	this.buttonSelectionChange('inserthorizontalrule');
	this.buttonSelectionChange('insertunorderedlist');
	this.buttonSelectionChange('insertorderedlist');
}
function iml_cHtmlEdit_syncHtmlSource(){			
		this.inputField.value = this.getHtml();  
}

function iml_cHtmlEditDialogBox(_url, _arguments, _features){
	this.url = _url;
	this.arguments = _arguments;
	this.features = _features;
	this.returnValue = null;

	iml_cHtmlEditDialogBox.prototype.show = iml_cHtmlEditDialogBox_show;
}
function iml_cHtmlEditDialogBox_show(){
	this.returnValue = window.showModalDialog(this.url, this.arguments, this.features);
}
