(function( $ ){

	$.uploaderMgr = {
		_managers : []
	};

	$.fn.configUploader = function(options) {
		var counter = 1;
		var uploaderMap = {};
		var defaultUploader = {
			timeout : 0,
			maxUploaders : 1,
			uploadUrl : '',
			uploaders : [],
			validUpload : 0,
			originalUploadWidget : null,
			_activeEntry : null,
			genericError : 'Try again',  //must be provided by caller
			onChange : function (){},
			defaultUploadEntry : {
				id : null,
				fileToken : '',
				status : 'none',
				jqForm : null,
				jqFrame : null,
				validUpload : true,
				startUpload : function (input) {
					var uploader = this;
					var idx = counter++;
					var frameId = 'jUploadFrame' +idx;
					var formId = 'jUploadForm' + idx;		
      				uploaderMap[frameId] = this;
					this.jqForm = this.owner.createForm(formId);
					this.jqForm.appendTo('body').css({position: 'absolute',top: '-1000px',left: '-1000px'});
					this.jqFrame = createUploadIframe(frameId);
					this.jqForm.attr('target',frameId);
					this.jqFrame.bind('load',function() { uploader.uploadCallback();});
					//clone orginal file input and move original iput to the form
					var oldElement = $(input);
					this.file = oldElement.val();
					var idx= this.file.lastIndexOf('\\');
					if ( idx >= 0 ) this.file = this.file.substring(idx+1,this.file.length);
					var newElement = $(this.owner.originalFileInput).clone();
					var mgr = this.owner;
					mgr.validUpload++;
					$(newElement).bind('change',function(e) {mgr.startUpload(this);});
					//var newElement = oldElement.clone();
					oldElement.before(newElement);
					oldElement.appendTo(this.jqForm);
					this.upload();

				},
				upload : function() {
					var uploader = this;
        			// Timeout checker
        			if ( this.owner.timeout > 0 ) {
            			this.timeout = setTimeout(function(){
                			if( !uploader.status == 'uploading' ) uploader.uploadCallback( "timeout" );
            				}, this.owner.timeout);
        			}
		
        			try {
						this.status = 'upload';
						this.owner.uploading(this);
            			uploader.jqForm.submit();
        			} catch(e) {			
					//this.uploadError(e);
        			}
    			},
				remove : function () {
					if ( this.status == 'upload' )
						this.status = 'cancel';
					this.jqActiveWidget.remove();
					//JSY - restore later after fixing EpsPostProcess.jsp
					//if ( this.jqFrame )
						//this.jqFrame.remove();
					if ( this.jqForm )
						this.jqForm.remove();	
					this.owner.remove(this);
				},
				switchActiveWidget : function(jqWidget ) {
					this.jqActiveWidget.replaceWith(jqWidget);
					this.jqActiveWidget = jqWidget;
				},
				uploadCallback : function(isTimeout){
					if ( this.status == 'upload' ) {
						// still uploading
						if ( isTimeout != 'timeout' ) {
						    var doc = null;
            				try {
								doc = this.jqFrame.document();
								this.status = 'response';
            				}catch(e){
								this.status = 'error';
							}
							this.owner.processResponse(this,doc);
						} else {
							this.status = 'timeout';
							this.owner.displayError(this,'timeout');			
						}
					}
				}

    		},
			startUpload : function (input) {
				//create form and switch file inout
				this._activeEntry = $.extend({}, this.defaultUploadEntry);
				this.uploaders.push(this._activeEntry);
				this._activeEntry.owner = this;
				this._activeEntry.startUpload(input);
			},
			uploading : function (uploader) {
				var jqProgressWidget = this.createUploadProgressIndicator(uploader); 
				
				if ( uploader == this._activeEntry ) {
					$(this.originalUploadWidget ).before(jqProgressWidget);
					uploader.jqActiveWidget = jqProgressWidget;
					this._activeEntry = null;
				} else {
					uploader.switchActiveWidget(jqProgreeWidget);
				}
				if ( this.uploaders.length >= this.maxUploaders )
					$(this.originalUploadWidget).hide();
			},
			removeUploadedData : function (uploader) {
				//client must provide thus
			},
			remove : function(uploader) {
				if ( uploader.validUpload )
					this.validUpload--;
				if ( uploader.fileToken != '' ) {
					this.removeUploadedData(uploader);
					uploader.fileToken = '';
					this.updatePostData();
				}
				//remove from stack
				var index = this.uploaders.indexOf(uploader);
				if ( index >= 0 )
					this.uploaders.splice(index,1);
				if ( this.uploaders.length < this.maxUploaders )
					$(this.originalUploadWidget).show();	
			},
			createForm: function(formId) {
				/* must be provided by client */
				return null;
			},
			createUploadProgressIndicator : function (uploader) {
				/* must be provided by client */
				return null;
			},
			processResponse : function(uploader, response) {
				//parse response and set uploader.status = 'success' or 'error'
				this.parseResponse(uploader,response);
				if ( uploader.status == 'success' ) {
					this.displayUploadedData(uploader);
					this.updatePostData();
				} else {
					this.displayError(uploader);
				}
			
			},
			parseResponse : function(uploader,response) {
				//must be provided by the client
 			},
			createUploadedDataDisplay : function (uploader) {
				//must be provided by the client
				return null;
			},
			displayUploadedData : function (uploader) {
				jqSuccessWidget = this.createUploadedDataDisplay(uploader);
				uploader.switchActiveWidget(jqSuccessWidget);
			},
			addOriginalData : function(urlsString) {
				if ( urlsString != '' ) {
					var urls = urlsString.splitUrls();
					for(var i = 0; i < urls.length;i++ ) {
						var uploader = $.extend({}, this.defaultUploadEntry);
						this.uploaders.push(uploader);
						uploader.fileToken = urls[i];
						uploader.owner = this;
						jqSuccessWidget = this.createUploadedDataDisplay(uploader);
				        //uploader.switchActiveWidget(jqSuccessWidget);
					    uploader.jqActiveWidget = jqSuccessWidget;
						$(this.originalUploadWidget ).before(jqSuccessWidget);
					}
					if ( this.uploaders.length >= this.maxUploaders )
						$(this.originalUploadWidget).hide();	

				}
			},
			updatePostData : function () {
				var urls = '';
				for(var i = 0; i < this.uploaders.length; i++ ) {
					if( this.uploaders[i].fileToken != "" ) {
						if ( urls != '' )
							urls += ',';
						urls += this.uploaders[i].fileToken;
					}
				}
				this.jqPostField.val(urls);
				this.onChange();
			},
			displayError : function (uploader,timeout) {
				//must be provided by the client
			},
			uploadingData : function () {
			    for(var i in this.uploaders ) {
			        if ( this.uploaders[i].status == 'upload' ) return true;
			    }
			    return false;
			}

		};
	
		function createUploadIframe( frameId) {
			return $('<iframe width="100" height="100" name="' + frameId + '" id="' + frameId + '"></iframe>') // src="javascript:false;">')
				.css({position: 'absolute',top: '-1000px',left: '-1000px'})
				.appendTo('body');
		}


		var mgr = $.extend({}, defaultUploader, options);
		mgr.originalUploadWidget = $('.upload-action',this)[0];
		var jqFileInput = $('input[@type = "file"]',this);
		mgr.originalFileInput = $('input[@type = "file"]',this).clone();
		mgr.jqPostField = $('input[@name = "' + mgr.dataField + '"]',this);
		mgr.addOriginalData(mgr.jqPostField.val());
		jQuery.data(this,mgr.id,mgr);
		$.uploaderMgr._managers.push(mgr);
		jqFileInput.bind('change',function(e) {mgr.startUpload(this);});

		$(mgr.originalUploadWidget).parents("form").bind('submit',function() {
            if ( mgr.uploadingData() ) {
		        $(mgr.popupMsg).hide().appendTo('body').modal();
		        return false;
		    }
		    return true;
		});
		if ( mgr.uploaders.length >= mgr.maxUploaders )
			$(mgr.originalUploadWidget).hide();

	};
	$.fn.configEpsUploader = function(options) {
        var defaultEpsUploader = {
        		createForm: function(formId) {
				    return $('<form method="post" action="' + this.uploadUrl + '" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data">' +
					    '<input type="hidden" name="s" value="' + this.setId + '"/><input type="hidden" name="v" value="' + this.epsVersion + '"/>' +
					    '<input type="hidden" name="b" value="' + this.defaultSizeId + '"><input type="hidden" name="n" value="k"/>' +
					    '<input type="hidden" name="a" value="' + epsToken + '"/>' +
					    '</form>');
			    },
        	    createUploadProgressIndicator : function (uploader) {
				    var jqProgress = $('<div class="loadingSmall" style="padding-left:20px;margin-left:2px;margin-top:8px;margin-bottom:12px;">'+
    				    '<span>' + uploader.file + ' : ' + this.uploadingText + '... [<a href="#">' + this.cancelText + '</a>]</span></div>');
				    $('a',jqProgress).click(function(e){e.preventDefault();uploader.remove();});
				    return jqProgress;
			    },
			    displayError : function (uploader,timeout) {
                    var errorText = null;
                    if ( uploader.error ) {
				        var errorCode = uploader.error.substring(0,2);
				        errorText = this.errorTexts[errorCode];
				    }
				    if ( errorText == null )
					    errorText = this.errorTexts["ERROR"];
				    var allowRetry = errorCode == "SD" || errorCode == "ME";
				    var jqErrorWidget =  $('<div class="error_field" style="padding-left:5px;padding-top:5px;padding-bottom:5px;margin-bottom:10px;padding-right:5px">' + uploader.file + ' - ' + (allowRetry ? '[<a href="#" class="upload-retry">' + this.retryText + '</a>] ' : '' ) + '[<a href="#" class="upload-cancel">' + this.removeText + '</a>]<br/><span class="error">' + errorText + '</span></div>');
				    $('.upload-cancel',jqErrorWidget).click(function(e){e.preventDefault();uploader.remove();});
				    $('.upload-retry',jqErrorWidget).click(function(e){e.preventDefault();uploader.upload();});
				    uploader.switchActiveWidget(jqErrorWidget);
				    if ( !allowRetry ) {
                        uploader.validUpload = false;
				        this.validUpload--;
					    $(this.originalUploadWidget).show();
					}	

			    },
			    createUploadedDataDisplay : function (uploader) {
				    //must be provided by the client
				    var file = uploader.fileToken;
				    //remove setid
				    var idx = file.indexOf('?set_id=');
				    if ( idx > 0 )
					    file = file.substring(0,idx);
				    idx = file.lastIndexOf('_');
				    file = file.substring(0,idx) + this.thumbnailSizeId + file.substring(idx + 3);
				    jqSuccessWidget = $('<div style="margin-left:2px;margin-top:8px;margin-bottom:10px;"><img src="' + file + '" > <a href="#" class="upload-cancel">' + this.removeText + '</a></div>');
				    $('.upload-cancel',jqSuccessWidget).click(function(e){e.preventDefault();uploader.remove();});
				    return jqSuccessWidget;
			    },
        	    parseResponse : function(uploader,doc) {
				    if ( doc != null ) {
				        var url = doc.location.toString();
				        var idx = url.indexOf('?');
				        if ( idx >= 0 ) {
				            url = url.substring(idx+1);
				            var list = url.split('&');
				            for(var i=0; i < list.length; i++ ) {
					            var param = list[i];
					            idx = param.indexOf('=');
					            var key = param.substring(0,idx);
					            var value = param.substring(idx+1); 
					            if ( key == 'picurl' ) {
						            uploader.fileToken = decodeURIComponent(param.substring(idx+1));
					            } 
					            if ( key == 'error' ) {
						            uploader.error = param.substring(idx+1);	
					            }
				            }
				        }
				    }
				    if ( uploader.fileToken != '' ) {
					    uploader.status = 'success';
				    } else {
					    if ( uploader.error == '' ) uploader.error = 'ERROR';
					    uploader.status = 'error';
				    }
 			    }
            };
		options = $.extend({}, defaultEpsUploader, options);
		this.configUploader(options);
		return this;
    };
    
	$.fn.configAttachmentUploader = function(options) {
        var defaultAttachmentUploader = {
        		createForm: function(formId) {
				    return $('<form method="post" action="' + this.uploadUrl + '" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data">' +
					    '<input type="hidden" name="adId" value="' + this.adId + '"/>' +
					    '</form>');
			    },
        	    createUploadProgressIndicator : function (uploader) {
				    var jqProgress = $('<div class="loadingSmall" style="padding-left:20px;margin-left:2px;margin-top:8px;margin-bottom:12px;">'+
    				    '<span>' + uploader.file + ' : ' + this.uploadingText + '... [<a href="#">' + this.cancelText + '</a>]</span></div>');
				    $('a',jqProgress).click(function(e){e.preventDefault();uploader.remove();});
				    return jqProgress;
			    },
			    displayError : function (uploader,timeout) {
				    //must be provided by the client
				    var error = uploader.error;
				    var allowRetry = false;
				    var jqErrorWidget =  $('<div class="error_field" style="padding-left:5px;padding-top:5px;padding-bottom:5px;margin-bottom:10px;padding-right:5px">' + uploader.file + ' - ' + (allowRetry ? '[<a href="#" class="upload-retry">' + this.retryText + '</a>] ' : '' ) + '[<a href="#" class="upload-cancel">' + this.removeText + '</a>]<br/><span class="error">' + error + '</span></div>');
				    $('.upload-cancel',jqErrorWidget).click(function(e){e.preventDefault();uploader.remove();});
				    $('.upload-retry',jqErrorWidget).click(function(e){e.preventDefault();uploader.upload();});
				    uploader.switchActiveWidget(jqErrorWidget);
				    if ( !allowRetry ) {
                        uploader.validUpload = false;
				        this.validUpload--;
					    $(this.originalUploadWidget).show();
					}	

			    },
			    createUploadedDataDisplay : function (uploader) {
					jqSuccessWidget = $('<div style="margin-left:2px;margin-top:8px;margin-bottom:10px;"><img src="' + picsPath + 'attachment.gif" > ' + uploader.file + ' <a href="#" class="upload-cancel">' + this.removeText + '</a></div>');
				    $('.upload-cancel',jqSuccessWidget).click(function(e){e.preventDefault();uploader.remove();});
				    return jqSuccessWidget;
			    },
        	    parseResponse : function(uploader,doc) {
        	        if ( doc != null ) {
        	    	    var content = $(doc).find('head').html();
                        var errorIndex = content.lastIndexOf("email_errormsg");
        	    	    if ( errorIndex >= 0) {
        	    		    errorIndex = content.indexOf('"',errorIndex + 16);
        	    		    var errorEnd = content.indexOf('"',errorIndex + 1);
        	    		    if ( errorIndex >= 0 && errorEnd > 0 && (errorEnd-errorIndex)>1) {
        	    			    uploader.error = content.substring(errorIndex + 1,errorEnd);
        	    			    uploader.status = 'error';
        	    			    return;
        	    		    }
        	    	    } 
        	    	    var randIndex = content.lastIndexOf("email_rand");
       	    		    if ( randIndex > 0 ) {
        	    		    randIndex = content.indexOf('"',randIndex + 12);
       	    		        var randEnd = content.indexOf('"',randIndex + 1);
        	    		    if ( randIndex >= 0 && randEnd > 0 ) {
        	    			    uploader.fileToken = content.substring(randIndex + 1,randEnd);
 	    					    uploader.status = 'success';
 	    					    return;
        	    		    }
        	    	    }
        	    	}
        	    	uploader.status = 'error';
        	    	uploader.error = this.genericError;
					//must provide for a generic error
 			    },
 			    updatePostData : function () {
					var urls = '';
					var files = '';
					for(var i = 0; i < this.uploaders.length; i++ ) {
						if( this.uploaders[i].fileToken != "" ) {
							if ( urls != '' ) {
								urls += ',';
								files += ',';
							}
							urls += this.uploaders[i].fileToken;
							files += this.uploaders[i].file;
						}
					}
					this.jqPostField.val(urls);
					this.jqFileNameField.val(files);
					this.onChange();
				}
            };
		options.jqFileNameField = $('input[@name = "' + options.filenameField + '"]',this);
		options = $.extend({}, defaultAttachmentUploader, options);
		this.configUploader(options);
		return this;
    };

	/*
	 * $(eventSrc).popupColorPicker(options)
	 */
	$.fn.popupColorPicker = function (options) {
		var id = 'rteColorPalette';
		var palette = $('#' + id);
		if ( palette.length == 0 ) {
			bgColors = [
				["#FFFFFF","#FFCCCC","#FFCC99","#FFFF99","#FFFFCC","#99FF99","#99FFFF","#CCFFFF","#CCCCFF","#FFCCFF"],
				["#CCCCCC","#FF6666","#FF9966","#FFFF66","#FFFF33","#66FF99","#33FFFF","#66FFFF","#9999FF","#FF99FF"],
				["#C0C0C0","#FF0000","#FF9900","#FFCC66","#FFFF00","#33FF33","#66CCCC","#33CCFF","#6666CC","#CC66CC"],
				["#999999","#CC0000","#FF6600","#FFCC33","#FFCC00","#33CC00","#00CCCC","#3366FF","#6633FF","#CC33CC"],
				["#666666","#990000","#CC6600","#CC9933","#999900","#009900","#339999","#3333FF","#6600CC","#993399"],
				["#333333","#660000","#993300","#996633","#666600","#006600","#336666","#000099","#333399","#663366"],
				["#000000","#330000","#663300","#663333","#333300","#003300","#003333","#000066","#330099","#330033"]];

			var str = '<div id="' + id + '" style="width:150px;height:100px"><table width="150" height="100" cellpadding="0" cellspacing="1" border="1">';
  			for(var i = 0; i < bgColors.length; i++ ) {
				str += '<tr>';
				var row = bgColors[i];
				for(var j = 0; j < row.length; j++) {
					str += '<td id="' + row[j] + '" bgcolor="' + row[j] + '" width="10" height="10"><img width="1" height="1"></td>';
				}
				str += '</tr>';
			} 
			str += '</table></div>';
			palette = $(str).appendTo('body');
			$('td',palette).each(function () {
				$(this).bind('mouseover',function() { this.style.border = '1px dotted white';})
						.bind('mouseout',function() { this.style.border = '1px solid gray';});
			});
		}
		var colorPickerDefault = {
			setColor : function (color) {
			},
			bindEvents: function () {
				var popup = this;
				$('td',this.jqContent).each(function () {
					$(this).bind('click',function(e) {popup.setColor(this.id);popup.close();});
				});

				this.jqContent.bind('click', function(e) {
					e.preventDefault();
					popup.close();
				});
				this.jqContent.bind('mouseleave', function(e) {
					e.preventDefault();
					popup.close();
				});

			}
		};
		var opts = $.extend({}, colorPickerDefault, options);
		palette.popup(this,opts);
	};
	
	$.fn.wysiwyg = function (options) {
		var rteDefault = {
			css : [],
			fonts : [
				["Arial, Helvetica, sans-serif","Arial"],
				["Courier New, Courier, mono","Courier New"],
				["Times New Roman, Times, serif","Times New Roman"],
				["Verdana, Arial, Helvetica, sans-serif","Verdana"]],
			buttons : [
				["Bold","bold","bold"],
				["Italic","italic","italic"],
				["Underline","underline","underline"],
				[null,"sep","blackdot"],
				["Align Left","justifyleft","left_just"],
				["Center","justifycenter","centre"],
				["Align Right","justifyright","right_just"],
				["Justify Full","justifyfull","justifyfull"],
				[null,"sep","blackdot"],
				["Horizontal Rule","inserthorizontalrule","hr"],
				[null,"sep","blackdot"],
				["Ordered List","insertorderedlist","numbered_list"],
				["Unordered List","insertunorderedlist","list"],
				[null,"sep","blackdot"],
				["Outdent","outdent","outdent"],
				["Indent","indent","indent"],
				["Text Color","forecolor","textcolor"],
				["Background Color","hilitecolor","bgcolor"]],
			createToolbar : function () {
				var html = '<div class="rteDiv"><table class="rteToolbar" cellpadding="2" cellspacing="0"><tbody><tr><td class="rteMenu">';

				for( var i = 0 ; i < this.buttons.length; i++ ) {
					html += '<img class="rte-' + this.buttons[i][1] + '" ' + (this.buttons[i][0] ? ('title="' + this.buttons[i][0] + '"'): '') + ' src="http://pic.classistatic.com/image/pics/classifieds/wysiwyg_editor/' + this.buttons[i][2] + '.gif"/>';
				}
				html += '</td></tr></tbody></table>';
				html += '<table class="rteToolbar" cellpadding="2" cellspacing="0"><tbody><tr><td>' +
					'<select name="fontType" id="fontname_Description">'
					'<option value="Font" selected="selected">[Font]</option>';
				for(var i = 0 ; i < this.fonts.length; i++ ) {
					html += '<option value="' + this.fonts[i][0] + '">' + this.fonts[i][1] + '</option>';
				}
				html += '</select>' + 
					'<select name="fontSize" unselectable="on" id="fontsize_Description">' +
					'<option value="Size">[Size]</option>';
				for( i = 1; i < 3; i++)
					html += '<option value="' + i + '">' + i + '</option>';
				for( i = 3; i < 6; i++)
					html += '<option value="' + (i+1) + '">' + i + '</option>';
				html += '</select></td></tr></tbody></table>';

				html += '</div>';
				return html;
			},
			initialDoc : function (html) {
				var frameHtml = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"/>\n";
	//to reference your stylesheet, set href property below to your stylesheet path and uncomment
				for( var i = 0; i < this.css.length; i++ ) {
					frameHtml += '<link href="' + this.css[i] + '" rel="stylesheet" type="text/css">';
				}
				frameHtml += "<style> body { background: #FFFFFF;margin: 0px;padding: 0px;text-align:left;}\n";
				frameHtml += " P {margin-top:0;margin-bottom:0}\n"; 
				frameHtml += " a{text-decoration: none;color:#000}\n";
				frameHtml += "</style></head><body>\n";
				frameHtml += html + "\n";
				frameHtml += "</body></html>";
				return frameHtml;
			},
			init : function(original){
				var self = this;
				self.original = original;
				original = $(original);
				var toolbar = $(self.createToolbar());
				original.before(toolbar);

				this.editor = $('<iframe height="200" width="500"></iframe>')[0];
				original.before(this.editor);

				$('.rteMenu > img',toolbar).each(function () {
					var button = $(this);
					var cls = button.attr('class');
					var list = cls.split('-');
					if ( list[1] != 'sep' ) {
						button.bind('click',function(e) {
							e.preventDefault();
							self.doCommand (list[1],this);
						});
					}
				});
				$('select',toolbar).each(function () {
					$(this).bind('change',function() {
						self.selectFont(this);
					});
				});            

            		self.editorDoc = $(self.editor).document();
            		self.editorDoc_designMode = false;

            		try {
                			self.editorDoc.designMode = 'on';
                			self.editorDoc_designMode = true;
            		} catch ( e ) {
                			// Will fail on Gecko if the editor is placed in an hidden container element
                			// The design mode will be set ones the editor is focused

                			$(self.editorDoc).focus(function(){self.designMode();});
            		}

            		self.editorDoc.open();
            		self.editorDoc.write(self.initialDoc($(self.original).val()));
            		self.editorDoc.close();
            		self.editorDoc = $(self.editor).document();
            		self.editorDoc.contentEditable = 'true';
        		},
			getSelection : function() {
            		return ( window.getSelection ) ? window.getSelection() : document.selection;
			},
        		getSelectionRange : function(){
            		var selection = this.getSelection();
            		if ( selection ) {
					if (document.all) {
						return selection.createRange();
					} else {
						if ( selection.rageCount > 0 )
							return selection.getRangeAt(selection.rangeCount - 1).cloneRange();
					}
				}

				return null;

            	//return ( selection.rangeCount > 0 ) ? selection.getRangeAt(0) : selection.createRange();
        		},
			execCommand : function(command, option) {
				var win = this.editor.contentWindow;
				try {
					win.focus();
	  				win.document.execCommand(command, false, option);
					win.focus();
				} catch (e) {
				}
			},
			translate : function () {
 				$($(this.editor).document() ).find('body').translate('en', 'de');
			},
        		getContent : function(){
            		return $( $(this.editor).document() ).find('body').html();
        		},
			doCommand : function(command,src) {
				var rte = this;
				if ( command == "hilitecolor" || command == "forecolor") {
					this.range = this.getSelectionRange();
					this.rteCommand = command;
					var opts = {
						setColor : function (color ) {
							rte.setColor(color);
						}
					};
					$(src).popupColorPicker(opts);
				} else {
					this.execCommand(command,"");
				}

			},
			selectFont : function(sel) {
				var idx = sel.selectedIndex;
		
				// First one is always a label
				if (idx != 0) {
					var selected = sel.options[idx].value;
					idx = sel.id.indexOf("_");
					var cmd = sel.id.substring(0,idx);
					this.execCommand(cmd, selected);
					sel.selectedIndex = 0;
				}
			},
			setColor:function(color) {
				if (document.all) {
					if (this.rteCommand == "hilitecolor") this.rteCommand = "backcolor";
					//retrieve selected range
					this.range.select();
				}
				this.execCommand(this.rteCommand,color);
			},
			designMode : function(){
            		if ( !( this.editorDoc_designMode ) ){
                			try {
                    			this.editorDoc.designMode = 'on';
                    			this.editorDoc_designMode = true;
                			} catch ( e ) {}
            		}
        		}
		};
		function Wysiwyg() {};
		return this.each(function(){
			var options = $.extend({}, rteDefault, options);
			var editor = new Wysiwyg();
			$.extend(editor,rteDefault,options);
			editor.init(this);
		});

	};	

})(jQuery);

