jQuery(document).ready(function() {
	var local = Core;
	local.wiki.jAjax = jQuery;
	
	local.wiki.sync = new Object();
	local.wiki.sync.timer = setInterval('sync_execute()',45000);
	local.wiki.sync.active = new Object();
	
	if (local.edit == 1) {
		local.wiki.sync.active.check_para_locks = local.page_id;
		var para_ids = new Array();
		var para_versions = new Object();
		jQuery('td.wiki_td_paragraph').each(function() {
			var jThis = jQuery(this);
			var para_id = jThis.find('input[name="para_id"]').val();
			var para_version = jThis.find('input[name="para_version"]').val();
			var para_type = jThis.find('input[name="para_type"]').val();
			para_ids.push(para_id);
			para_versions[para_id] = [para_version, para_type];
		});
		local.wiki.sync.active.check_para_versions = [local.page_id, para_ids, para_versions]; 
	}
	
	local.wiki.jAjax.ajaxSetup({
		url: '/cgi-bin/apps/ajax/wiki',
		dataType: 'json',
		error: function() {
			simple_dialog('Error', 'Unexpected Error', 2);
		},
		timeout: 15000,
		type: 'POST'
	})

	init();
	init_gallery_stack();
	check_icons();
	
	if (local.after_edit != 0) {
		var jFrame = jQuery('td.wiki_td_paragraph input[name="para_id"][value="'+local.after_edit+'"]').parents('td.wiki_td_paragraph');
		jFrame.find('img.wiki_img_para_edit').trigger('click');
	}
});

function adjustPosition(caller) {
    var parent = caller.parents('ul:first');
    if (parent.hasClass('children_holder')) {
        var windowWidth = jQuery(document).width();
        var parentWidth = parent.width();
        var localWidth = caller.width();
        var topOffset = caller.parent('li').height()+6;
        var parentPosition = parent.offset();
        
        if (parentPosition.left + localWidth + parentWidth < windowWidth) {
            caller.css({
                left: parentWidth,
                marginTop: '-'+topOffset+'px'
            });
        } else {
            caller.css({
                left: '-'+localWidth+'px',
                marginTop: '-'+topOffset+'px'
            });
        }
    }
}

function check_icons() {
	jQuery('img.wiki_img_para_edit')
		.filter('.locked')
			.attr('src', '/osr/icons/kde/crystalclear/16x16/actions/yahoo_busy.png')
			.end()
		.not('.locked')
			.attr('src', '/osr/olefa19/collaboration/Icons/edit.png');
	
	jQuery('img.wiki_img_para_lock')
		.filter('.locked')
			.attr('src', '/osr/icons/kde/crystalclear/16x16/actions/encrypted.png')
			.end()
		.not('.locked')
			.attr('src', '/osr/icons/kde/crystalclear/16x16/actions/decrypted.png');
	
	jQuery('img.wiki_img_para_publish')
		.filter('.unpublished')
			.attr('src', '/osr/icons/kde/wiki/offline_small.png')
			.end()
		.not('.unpublished')
			.attr('src', '/osr/icons/kde/wiki/online_small.png');
	
	jQuery('img.wiki_img_hidden_notifier')
		.filter('.unpublished')
			.show()
			.end()
		.not('.unpublished')
			.hide();
}

function enterEditMode(jFrame, autosave, action) {
	var local = Core;
	
	var para_id = jFrame.children('input[name="para_id"]').val();
	var para_type = jFrame.children('input[name="para_type"]').val();
	
	autosave = (autosave === undefined) ? '' : autosave;
	action = (action === undefined) ? '' : action;
	
	jFrame.find('img.wiki_img_loading').show();
	local.wiki.jAjax.ajax({
		data: {
			sid: local.sid,
			com: local.com,
			mode: 'viewedit_enter',
			projectid: local.project_id,
			page_id: local.page_id,
			para_id: para_id,
			para_type: para_type,
			autosave: autosave,
			autosave_action: action
		},
		success: function(json) {
			if (json.status == 0) {
				set_para_edit_status(para_id, 0);
				local.wiki.sync.active.update_para_lock = [local.page_id, para_id];
				reset_modified();
				jFrame.siblings().hide();
				var background_color = jFrame.find('input[name="background_color"]').val() || 'FFFFFF';
				jFrame.css('backgroundColor', '#'+background_color);
				jFrame.addClass('active');
				jFrame.find('div.wiki_div_para_code').replaceWith(json.html);
				if (para_type == 'gallery') {
					reload_galleriffic(jFrame);
					init_gallery_stack();
				};
				var editor = '<div class="wiki_div_para_editor">'+json.edit_html+'</div>';
				jFrame
					.children('div:first')
						.append(editor)
						.siblings()
							.children()
								.hide();
				var editor_position = jFrame.find('div.wiki_div_para_editor').offset();
				jQuery('html')
					.stop(true, true)
					.animate({scrollTop: editor_position.top-50});
				if (json.autosave_contents != null) {
					var params = json.autosave_contents.params;
					for (var i in params) {
						jFrame.find('[name="'+i+'"]').val(params[i]);
					}
					local.wiki.modification = true;
				}
				init_tinyMCE();
				
				//para specific initialisations
				if (para_type == 'linklist') {
					init_linklist_search();
				}
				if (para_type == 'gallery' || para_type == 'document' || para_type == 'linklist') {
					init_sortable(jFrame);
				}
				if (para_type == 'quiz') {
					init_accordion(jFrame);
					jQuery('input#wiki_input_quiz_question').watermark(local.lang.question, 'watermark');
				}
				
				createOlefaButtons();
				init_colorpicker(jFrame);
				if (json.autosave.status == 0) {
					local.wiki.sync.active.autosave = [para_id, json.autosave.token, {}, {}];
					local.wiki.token = json.autosave.token;
				}
				
				
				jQuery(window).bind('unload', function() {
					local.wiki.jAjax.ajax({
						data: {
							sid: local.sid,
							com: local.com,
							mode: 'viewedit_exit',
							projectid: local.project_id,
							page_id: local.page_id,
							para_id: para_id,
							file_token: local.wiki.token
						}
					});
				});
				
			} else {
				if (json.status == 51) {
					var jDialog = dialog(json.lang.title, json.lang.message, 0);
					var Buttons = new Object();
					Buttons[json.lang.drop] = function() {
						enterEditMode(jFrame, json.token, 0);
						jQuery(this).dialog('close');
					}
					Buttons[json.lang.use] = function() {
						enterEditMode(jFrame, json.token, 1);
						jQuery(this).dialog('close');
					}
					jDialog.dialog({
						modal: true,
						buttons: Buttons
					});
				} else {
					generate_error(json.error);
					if (json.status == 1) {
						set_para_lock_status(para_id, 1);
					} else {
						set_para_edit_status(para_id, 1);
					}
				}
			}
		},
		complete: function() {
			jFrame.find('img.wiki_img_loading').hide();
		}
	});
	
}

function exitEditMode(jFrame) {
	var local = Core;
	var para_id = jFrame.children('input[name="para_id"]').val();
	if (local.wiki.modification == false) {
		var token = local.wiki.token;
		delete local.wiki.sync.active.update_para_lock;
		delete local.wiki.sync.active.autosave;
		//tinyMCE.removeMCEControl(tinyMCE.getEditorId('para_text'));
		for (var key in tinyMCE.editors) {
			var item = tinyMCE.editors[key];
			if (typeof(item) != 'undefined') {
				item.remove()
			};
		}
		jFrame.siblings().show();
		jFrame
			.stop(true,false)
			.removeClass('active')
			.find('div.wiki_div_para_editor')
				.remove()
				.end()
			.find('div.wiki_div_para_controls')
				.stop(true,false)
				.animate({
					opacity: 0
				})
				.end()
			.siblings()
				.children()
					.show();
		jQuery('body').css({
			overflow: 'auto'
		});
		reset_modified();
		
		local.wiki.jAjax.ajax({
			data: {
				sid: local.sid,
				com: local.com,
				mode: 'viewedit_exit',
				projectid: local.project_id,
				page_id: local.page_id,
				para_id: para_id,
				file_token: token
			}
		});
		jQuery(window).unbind('unload');
		init_gallery_stack();
		return true;
	} else {
		var jDialog = dialog(local.lang.warning, local.lang.unsaved_content, 1);
		var buttons = new Object();
		buttons[local.lang.not_save] = function() {
			jQuery(this).dialog('close');
			reset_modified();
			exitEditMode(jFrame);
		};
		buttons[local.lang.cancel] = function() {
			jQuery(this).dialog('close');
		};
		buttons[local.lang.save] = function() {
			jFrame.find('button.wiki_button_paraedit_apply').trigger('click');
			jQuery(this).dialog('close');
			reset_modified();
			exitEditMode(jFrame);
		}
		jDialog.dialog({
			buttons: buttons
		});
		return false;
	}
}

function fullscreen_resize() {
	var total_height = jQuery('div.wiki_div_para_editor').height();
	var jElements = jQuery('div.wiki_div_para_editor').children().not('.wiki_div_editor').add('tr.mceFirst,tr.mceLast');
	var remove_height = 10;
	jElements.each(function() {
		remove_height += jQuery(this).height();
	})
	var height = total_height-remove_height;
	
	if (height > 30) {
		jQuery('iframe#text_ifr"').css('height', height);
	}
}

function init_accordion(jFrame) {
	var stop = false;
	jQuery('div#wiki_div_quiz_holder_edit h3').live('click', function( event ) {
		if ( stop ) {
			event.stopImmediatePropagation();
			event.preventDefault();
			stop = false;
		}
	});
	jQuery('div#wiki_div_quiz_holder_edit').accordion({
		autoHeight: false,
		clearStyle: true,
		collapsible: true,
		active: false,
		header: '> div > h3'
	})
	.sortable({
		axis: "y",
		handle: "h3",
		stop: function() {
			stop = true;
		}
	});
};

function init_colorpicker(jFrame) {
	jQuery('.wiki_colorpicker').each(function() {
		var color = jQuery(this).css('backgroundColor');
		color = rgb2hex(color);
		jQuery(this).ColorPicker({
			color: color,
			onShow: function (colpkr) {
				jQuery(colpkr).fadeIn(500);
				return false;
			},
			onHide: function (colpkr) {
				jQuery(colpkr).fadeOut(500);
				return false;
			},
			onSubmit: function(hsb, hex, rgb, el) {
				jQuery(el).css('backgroundColor', '#' + hex);
				var selector = jQuery(el).attr('data');
				jFrame.find('input#'+selector).val(hex);
				set_modified();
				jQuery('div.colorpicker').fadeOut(500);
			}
		});
	});
	jQuery('span#wiki_span_border_color_clear').bind('click', function() {
		jQuery(this)
			.siblings('input#wiki_input_border_color')
				.val('')
				.end()
			.siblings('div.wiki_colorpicker')
				.css('backgroundColor', 'transparent');
	});
}

function init() {
	var local = Core;
	jQuery('select#wiki_select_my_rating').change(function() {
		rating_changed(this);
	});
	
	jQuery('div#wiki_div_rating_activity').live('click', function() {
		jQuery(this).fadeOut();
	});
	
	jQuery('button.wiki_button_delete_comment').bind('click', function() {
		var comment_id = jQuery(this).siblings('input.wiki_input_comment_id').val();
		var jComment = jQuery(this).parents('tr:first');
		local.wiki.jAjax.ajax({
			data: {
				sid: local.sid,
				com: local.com,
				mode: 'remove_comment',
				comment_id: comment_id,
				project_id: local.project_id
			}, 
			success: function(json) {
				if (json.status == 0) {
					jComment.remove();
				}
			}
		});
	})
	
	init_navigation();
	init_view_appendix();
	init_slideshow();
	
	jQuery('td.wiki_td_paragraph:not(.active)').live('mouseenter', function() {
		if (local.edit == 1) {
			jQuery(this)
				.stop(true, false)
				.animate({
					backgroundColor: '#EEEEFF'
				})
				.find('div.wiki_div_para_code')
					.css('backgroundColor', 'transparent')
					.end()
				.find('div.wiki_div_para_controls')
					.stop(true,false)
					.animate({
						backgroundColor: '#EEEEFF',
						opacity: 1
					});
		};
		var jReference = jQuery(this).find('div.wiki_div_para_code');
		gallery_stack_explode(jReference, 3);
	})
	.live('mouseleave', function() {
		if (local.edit == 1) {
			var background_color = jQuery(this).find('input[name="background_color"]').val() || 'FFFFFF';
			jQuery(this)
			.stop(true, false)
			.animate({
				backgroundColor: '#'+background_color
			}, function(){
				jQuery(this)
					.find('div.wiki_div_para_code')
					.css('backgroundColor', '#'+background_color)
			})
			.find('div.wiki_div_para_controls')
				.stop(true,false)
				.animate({
					backgroundColor: '#'+background_color,
					opacity: 0
				});
		};
		var jReference = jQuery(this).find('div.wiki_div_para_code');
		gallery_stack_explode(jReference, 1);
	});
	
	if (local.edit == 1) {	
		jQuery('.frame_control').live('click', function() {
			jQuery('td.wiki_td_add_new_para, table.wiki_table_add_new_para').remove();
		})
		
		jQuery('img.wiki_img_para_add').live('click', function() {
			var jFrame = jQuery(this).parents('td.wiki_td_paragraph');
			var jLine = jFrame.parents('table.wiki_td_new_row');
			
			var td_html = '<td class="wiki_td_add_new_para"></td>';
			var tr_html = '<table class="wiki_table_add_new_para" height="50" width="100%"><tr><td width="100%"></td></tr></table>';
			
			jFrame.before(td_html).after(td_html);
			var td_count = jFrame.siblings().size()+1;
			var width = 100/td_count;
			jFrame.siblings(':not(.wiki_td_add_new_para)').add(jFrame).attr('width', width+'%');
			jQuery('td.wiki_td_add_new_para').attr('width', width/2+'%');
			
			jLine.before(tr_html).after(tr_html);
		})
		
		jQuery('img.wiki_img_para_lock').live('click', function() {
			var jThis = jQuery(this);
			var jFrame = jThis.parents('td.wiki_td_paragraph');
			jFrame.find('img.wiki_img_loading').show();
			
			var para_id = jFrame.find('input[name="para_id"]').val();
			var lock_mode = (jThis.hasClass('locked')) ? 'unlock' : 'lock';
			local.wiki.jAjax.ajax({
				data: {
					sid: local.sid,
					com: local.com,
					projectid: local.project_id,
					page_id: local.page_id,
					mode: lock_mode+'_para',
					para_id: para_id
				},
				success: function(json) {
					if (json.status == 0) {
						if (lock_mode == 'lock') {
							set_para_lock_status(para_id, 1);
							set_para_edit_status(para_id, 1);
						} else {
							set_para_lock_status(para_id, 0);
							set_para_edit_status(para_id, 0);
						}
					} else {
						generate_error(json.error);
					}
				},
				complete: function() {
					jFrame.find('img.wiki_img_loading').hide();
				}
			})
		});
		
		jQuery('img.wiki_img_para_publish').live('click', function() {
			var jThis = jQuery(this);
			var jFrame = jThis.parents('td.wiki_td_paragraph');
			jFrame.find('img.wiki_img_loading').show();
			
			var para_id = jFrame.find('input[name="para_id"]').val();
			var publish_mode = (jThis.hasClass('unpublished')) ? 'publish' : 'unpublish';
			local.wiki.jAjax.ajax({
				data: {
					sid: local.sid,
					com: local.com,
					projectid: local.project_id,
					page_id: local.page_id,
					mode: publish_mode+'_para',
					para_id: para_id
				},
				success: function(json) {
					if (json.status == 0) {
						if (publish_mode == 'unpublish') {
							set_para_public_status(para_id, 1);
						} else {
							set_para_public_status(para_id, 0);
						}
					} else {
						generate_error(json.error);
					}
				},
				complete: function() {
					jFrame.find('img.wiki_img_loading').hide();
				}
			})
		});
		
		jQuery('img.wiki_img_para_delete').live('click', function() {
			var jFrame = jQuery(this).parents('td.wiki_td_paragraph');
			var Buttons = new Object();
			Buttons[local.lang.cancel] = function() {
				jQuery(this).dialog('close');
			}
			
			Buttons[local.lang.ddelete] = function() {
				jQuery(this).dialog('close');
				jFrame.find('img.wiki_img_loading').show();
				var para_id = jFrame.find('input[name="para_id"]').val();
				local.wiki.jAjax.ajax({
					data: {
						sid: local.sid,
						com: local.com,
						projectid: local.project_id,
						page_id: local.page_id,
						mode: 'delete_para',
						para_id: para_id
					},
					success: function(json) {
						if (json.status == 0) {
							jFrame.remove();
						} else {
							generate_error(json.error);
						}
					},
					complete: function() {
						jFrame.find('img.wiki_img_loading').hide();
					}
				})
			};
			
			var jDialog = dialog(local.lang.ddelete, local.lang.delete_ask, 0);
			jDialog.dialog({
				buttons: Buttons
			});
		});

		jQuery('td.wiki_td_add_new_para, table.wiki_table_add_new_para').live('click', function() {
			var jThis = jQuery(this);
			if (jThis.hasClass('active')) {
				return false;
			}
			jThis.addClass('active');
			if (jThis.is('td')) {
				jQuery('td.wiki_td_add_new_para, table.wiki_table_add_new_para').not(jThis).remove();
				var td_count = jThis.siblings().size()+1;
				var width = 100/td_count;
				jThis.siblings().add(jThis).attr('width', width+'%');
			} else if (jThis.is('table')) {
				jQuery('td.wiki_td_add_new_para, table.wiki_table_add_new_para').not(jThis).remove();
				jThis = jThis.find('td');
			}
			
			jThis.css({
				background: 'white',
				border: '3px solid black',
				opacity: 1
			})
			
			local.wiki.jAjax.ajax({
				dataType: 'html',
				data: {
					sid: local.sid,
					com: local.com,
					mode: 'wikiview_para_add_ui'
				},
				success: function(html) {
					jThis.append(html);
					createOlefaButtons();
				}
			});
		})
		
		jQuery('button#wiki_button_new_para_cancel').live('click', function() {
			jFrame = jQuery(this).parents('td.wiki_td_add_new_para, table.wiki_table_add_new_para');
			jFrame.remove();
		})
		
		jQuery('button#wiki_button_new_para_add').live('click', function() {
			var jFrame = jQuery(this).parents('td.wiki_td_add_new_para, table.wiki_table_add_new_para');
			var para_type = jFrame.find('select#wiki_select_para_add_type').val();
			var paras = jQuery('td.wiki_td_paragraph, td.wiki_td_add_new_para, table.wiki_table_add_new_para');
			var new_para_index = jQuery(paras).index(jFrame);
			var jPrevPara = jQuery(paras).eq(new_para_index-1);
			var prev_id = (new_para_index > 0) ? jPrevPara.find('input[name="para_id"]').val() : -1;
			var new_line = (jFrame.is('table')) 
				? 2
				: (jFrame.is(':last-child')) 
					? 1 
					: 0;
			var pData = {
				sid: local.sid,
				com: local.com,
				mode: 'add_para_position',
				projectid: local.project_id,
				page_id: local.page_id,
				para_type: para_type,
				prev_id: prev_id,
				new_line: new_line
			}

			local.wiki.jAjax.ajax({
				data: pData,
				success: function(json) {
					if (json.status == 0) {
						window.location = '/cgi-bin/apps/wikiview?sid='+local.sid+'&com='+local.com+'&mode=viewer&projectid='+local.project_id+'&page_id='+local.page_id+'&after_edit='+json.para_id;
					} else {
						generate_error(json.error);
					}
				}
			});
		})
		
		jQuery('img.wiki_img_para_edit, button.wiki_button_paraedit_cancel').live('click', function() {
			var jFrame = jQuery(this).parents('td.wiki_td_paragraph');
			var jContent = jFrame;
			var edit = false;
			if (jFrame.hasClass('active')) {
				edit = true;
			}
			
			var result = true;
			
			jQuery('td.wiki_td_paragraph.active').not(jFrame).each(function(){
				result = exitEditMode(jQuery(this)) && result;
			});
			
			if (result) {
				if (edit) {
					exitEditMode(jFrame);
				} else {
					enterEditMode(jFrame);
				}
			}
		})
		
		jQuery('button.wiki_button_paraedit_apply').live('click', function() {
			var jFrame = jQuery(this).parents('td.wiki_td_paragraph');
			var para_id = jFrame.children('input[name="para_id"]').val();
			var para_type = jFrame.children('input[name="para_type"]').val();
			
			jFrame.find('span#wiki_span_saving').show();
			
			var pData = {
				sid: local.sid,
				com: local.com,
				mode: 'paraedit_save',
				projectid: local.project_id,
				page_id: local.page_id,
				para_id: para_id,
				para_type: para_type,
				file_token: local.wiki.token
			}
			
			var jInputs = jFrame.find('div.wiki_div_para_editor :input');
			jInputs.each(function() {
				var jThis = jQuery(this);
				var name = jThis.attr('name');
				if (name != '') {
					if (jThis.is('[type="checkbox"]')) {
						pData[name] = (jThis.is(':checked')) ? 'on' : '';
					} else if (jThis.is('[type="radio"]')) {
						if (jThis.is(':checked')) {
							pData[name] = jThis.val();
						}
					} else if (jThis.is('[name$="[]"]')) {
						if (typeof(pData[name]) == 'undefined') {
							pData[name] = new Array();
						}
						pData[name].push(jThis.val());
					} else {
						pData[name] = jThis.val();
					}
				}
			});
			
			for (var key in tinyMCE.editors) {
				var item = tinyMCE.editors[key];
				pData[key] = item.getContent();
			}
			
			local.wiki.jAjax.ajax({
				data: pData,
				traditional: true,
				success: function(json) {
					if (json.status == 0) {
						local.wiki.sync.active.check_para_versions[2][para_id][0] = json.version;
						jFrame.find('input[name="para_version"]').val(json.version)
						jFrame.find('div.wiki_div_para_code').replaceWith(json.para_html);
						var color = jFrame.find('div.wiki_div_para_code').css('backgroundColor');
						jFrame.css('backgroundColor', color);
						// and yet another msie hack
						if (typeof(jQuery.browser.msie) == 'undefined') {
							jQuery('style#wiki_style_linkcolor').html(json.para_css);
						}
						reset_modified();
						if (para_type == 'gallery') {
							reload_galleriffic(jFrame);
							init_gallery_stack();
						}
					}
				},
				complete: function() {
					jFrame.find('span#wiki_span_saving').hide();
				}
			})
		})
		
		jQuery('div.wiki_div_para_editor :input').live('keydown', function() {
			set_modified();
		})
		
		jQuery('button#wiki_button_fullscreen_edit').live('click', function() {
			var jThis = jQuery(this);
			if (!jThis.is('.active')) {
				jThis.addClass('active');
				var jFrame = jQuery(this).parents('td.wiki_td_paragraph');
				var jEdit = jFrame.find('div.wiki_div_para_editor');
				jQuery('body').css({
					overflow: 'hidden'
				});
				jEdit.css({
					position: 'fixed',
					margin: 0,
					padding: 0,
					left: 0,
					right: 0,
					top: 0,
					bottom: 0,
					zIndex: 1000,
					overflow: 'auto'
				});
				
				var para_type = jFrame.find('input[name="para_type"]').val();
				if (para_type == 'text') {
					jQuery(window).bind('resize', function() {
						fullscreen_resize();
					});
					fullscreen_resize();
				};
			} else {
				jThis.removeClass('active');
				var jFrame = jQuery(this).parents('td.wiki_td_paragraph');
				var jEdit = jFrame.find('div.wiki_div_para_editor');
				var para_type = jFrame.find('input[name="para_type"]').val();
				
				jQuery('body').removeAttr('style');
				jEdit.removeAttr('style');
				if (para_type = 'text') {
					jQuery('iframe#para_text_ifr').css('height', 400);
				};
			}
		})
	}
};

function init_navigation() {
	jQuery('ul#wiki_ul_leftbar_nav, ul#wiki_ul_rightbar_nav').superfish({
		onBeforeShow: function() {
			adjustPosition(this);
		}
	});
}

function init_tinyMCE() {
	var tinyMCELang = 'en';
	if (OlefaLang == 'lb' || OlefaLang == 'lu') {
		tinyMCELang = 'lb';
	} else if(OlefaLang == 'de' || OlefaLang == 'fr') {
		tinyMCELang = OlefaLang;
	}
	
	tinyMCE.init({
		mode : "textareas",
		editor_selector : "wiki_textarea_tinyMCE",
		theme : "advanced",
		width: '100%',
		plugins : "safari,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,"
			+ "iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,paste,"
			+ "directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,"
			+ "table,paste,fullscreen",
		theme_advanced_buttons1 : "fontselect,fontsizeselect,bold,italic,underline,strikethrough,|,sub,sup,|,justifyleft,justifycenter,justifyright,justifyfull,|,"
			+ "forecolor,backcolor,|,"
			+ "cut,copy,paste,pastetext,pasteword,|,"
			+ "undo,redo,|,search,replace,|,",
		theme_advanced_buttons2 : "tablecontrols,|,"
			+ "bullist,numlist,|,"
			+ "hr,|,charmap,emotions,media,advhr,|,visualchars,nonbreaking,|,print,|,nonbreaking,|,"
			+ "insertdate,inserttime,preview,|,"
			+ "visualaid,|,"
			+ "removeformat,unlink,cleanup,code",
		theme_advanced_buttons3 : "",
		theme_advanced_toolbar_location : "top",
		theme_advanced_toolbar_align : "left",
		theme_advanced_path_location : "bottom",
		extended_valid_elements : "a[name|href|target|title|onclick],"
			+ "img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name|usemap],"+
			+ "hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]"
			+ "iframe[src|width|height|name|align|frameborder|allowfullscreen]",
		content_css : '/osr/stylesheets/apps/wikiedit.css',
		cleanup : true,
		entity_encoding : "raw",
		onchange_callback : function() {
			set_modified();
		},
		language : tinyMCELang
	});
}

function init_sortable(jFrame) {
	var local = Core;
	jFrame.find('div.wiki_div_editor ul#wiki_ul_gallery_container').sortable({
		create: function(event, ui) {
			gallery_set_selection(jFrame);
		},
		update: function(event, ui) {
			gallery_set_selection(jFrame);
			set_modified();
		}
	});
	
	jFrame.find('div.wiki_div_editor ul#wiki_ul_document_container').sortable({
		create: function(event, ui) {
			document_set_selection(jFrame);
		},
		update: function(event, ui) {
			document_set_selection(jFrame);
			set_modified();
		}
	});
	
	jFrame.find('div.wiki_div_editor ul#wiki_ul_linklist_container').sortable({
		create: function(event, ui) {
			linklist_set_selection(jFrame);
		},
		update: function(event, ui) {
			linklist_set_selection(jFrame);
			set_modified();
		}
	});
}

function reload_galleriffic(jFrame) {
	jFrame.find('a').each(function(){
		if (jQuery(this).attr('href') && jQuery(this).attr('href').match('displaymode=thumbnails') && jQuery(this).attr('href').match('/browse')) {
			jQuery(this).attr('class', 'thickbox');
			jQuery(this).attr('href', jQuery(this).attr('href').replace('browse','gallery'));
			if (jQuery(this).attr('href').match('www\.') && !location.host.match('www\.')) {
				jQuery(this).attr('href', jQuery(this).attr('href').replace('www\.',''));
			}
		}
		if (jQuery(this).attr('href') && jQuery(this).attr('href').match('&dir') && jQuery(this).attr('href').match('&mode=image') && jQuery(this).attr('href').match('/wikiview')) {
			jQuery(this).attr('class', 'thickbox');
			if (jQuery(this).attr('href').match('www\.') && !location.host.match('www\.')) {
				jQuery(this).attr('href', jQuery(this).attr('href').replace('www\.',''));
			}
			jQuery(this).attr('href', jQuery(this).attr('href').replace('wikiview','gallery'));
			jQuery(this).attr('href', jQuery(this).attr('href').replace('&image=','&startimg='));
			jQuery(this).attr('href', jQuery(this).attr('href').replace('&img=','&startimg='));
			jQuery(this).attr('href', jQuery(this).attr('href').replace('mode=image','mode=display'));
			jQuery(this).attr('href', jQuery(this).attr('href')+'&type=images&displaymode=thumbnails');
		}
	});
	tb_init('a.thickbox, area.thickbox, input.thickbox');
	imgLoader = new Image();
	imgLoader.src = tb_pathToImage;
}

function init_linklist_search() {
	jQuery('input#wiki_input_project_search')
	.watermark('Search project...','watermark')
	.autocomplete({
		minLength: 0,
		search: function(event, ui) {
			var caller = event.target;
			var text = jQuery(caller).val();
			search_apply_filter(text);
			return false;
		}
	});
};

function init_gallery_stack() {
	jQuery('div.wiki_div_gallery_holder').each(function() {
		var jThis = jQuery(this)
		var jFrame = jThis.parents('div.wiki_div_para_code:first');
		var height = jFrame.height();
		var width = jFrame.width();
		var left = width/2-50;
		var top = height/2-50;
		jThis.children('div').each(function() {
			var rotate = Math.floor(Math.random()*60)-30;
			var move_left = (Math.floor(Math.random()*60)-30)   +left;
			var move_top = (Math.floor(Math.random()*60)-30)+top;
			jQuery(this).css({
				'-moz-transform': 'rotate('+rotate+'deg)',
				'-webkit-transform': 'rotate('+rotate+'deg)',
				'left': move_left,
				'top' : move_top
			});
		});
	})
}

function init_slideshow() {
	jQuery('ul.wiki_ul_gallery_slideshow_container>li')
    .not('li:first')
        .css({
            'display': 'none'
        })
        .end()
    .filter('li:first')
        .addClass('active');
	setInterval('cyclePicture();', 5000);
}

function cyclePicture() {
    var root = jQuery('ul.wiki_ul_gallery_slideshow_container');
    root.each(function() {
    	var jThis = jQuery(this);
    	var current = jThis.children('li.active');
        var maxItems = jThis.children('li').size();
        var currItem = jThis.children('li').index(current);
        
        var next = (currItem+1>=maxItems) ? jThis.children('li:first') : current.next();
        
        next.css({
            'left': 545,
            'display': 'block'
        })
        
        current.add(next).animate({
            'left': '-=545px'
        }, function() {
            current.hide();
            current.removeClass('active');
            next.addClass('active');
        });
    })
};

function gallery_stack_explode(jFrame, magnitude) {
	var height = jFrame.height();
	var width = jFrame.width();
	var left = width/2-50;
	var top = height/2-50;
	jFrame.find('div.wiki_div_gallery_image_stack').each(function() {
		var move_left = (Math.floor(Math.random()*60)-30)*magnitude+left;
		var move_top = (Math.floor(Math.random()*60)-30)*magnitude+top;
		jQuery(this).stop(true).animate({
			'left': move_left,
			'top' : move_top
		}, 500, 'easeOutExpo');
	});
};

function gallery_set_selection(jFrame) {
	var listContainer = jFrame.find('div.wiki_div_editor ul#wiki_ul_gallery_container');
	var jList = jQuery(listContainer).children('li');
	var file_list = '';
	jList.each(function() {
		var filename = jQuery(this).children('img.gallery_image').attr('alt');
		var nfilename = filename.replace(/\/tn_/, '/');
		file_list += nfilename + '^';
	});
	jFrame.find('input[name="files"]').val(file_list);
}

function document_set_selection(jFrame) {
	var listContainer = jFrame.find('div.wiki_div_editor ul#wiki_ul_document_container');
	var jList = jQuery(listContainer).children('li');
	var file_list = '';
	jList.each(function() {
		var filename = jQuery(this).attr('alt');
		file_list += filename + '^';
	});
	jFrame.find('input[name="files"]').val(file_list);
}

function linklist_set_selection(jFrame) {
	var listContainer = jFrame.find('div.wiki_div_editor ul#wiki_ul_linklist_container');
	var jList = jQuery(listContainer).children('li');
	var file_list = '';
	jList.each(function() {
		var jInputs = jQuery(this).children('input');
		var value = '';
		jInputs.each(function() {
			value += jQuery(this).val() + '^';
		})
		file_list += value;
	});
	jFrame.find('input[name="files"]').val(file_list);
}

function rating_changed(caller) {
	var rating = jQuery(caller).val();
	if (rating != '') {
		send_rating(rating);
	}
};

function rating_update_success(json) {
	jQuery('span#wiki_span_rating_count').html(json.text.average_basis);
	jQuery('span#wiki_span_rating_date').html(json.ratingDate);
	jQuery('span#wiki_span_average_rating_stars').html(json.stars_html);
	
	set_rating_activity('/osr/icons/kde/crystalclear/16x16/actions/button_ok.png', json.message, '#BBFFBB');
}

function replace_paragraph_versions(para_html) {
	var local = Core;
	for (var key in para_html) {
		var jPara = jQuery('div.wiki_div_para_code.para_id_'+key);
		var jParaParent = jQuery('div.wiki_div_para_code.para_id_'+key).parent();
		jParaParent.css({
			opacity: 0
		})
		jPara.replaceWith(para_html[key].html)
		jParaParent.animate({
			opacity: 1
		},500);
		
		var jFrame = jParaParent.parents('td.wiki_td_paragraph:first');
		var para_type = jFrame.find('input[name="para_type"]').val();
		if (para_type == 'gallery') {
			reload_galleriffic(jFrame);
			init_gallery_stack();
		}

		jParaParent
			.parents('td.wiki_td_paragraph:first')
				.find('input[name="para_version"]')
					.val(para_html[key].version);
		local.wiki.sync.active.check_para_versions[2][key][0] = para_html[key].version;
	}
}

function send_rating(rating) {
	var local = Core;	
	
	set_rating_activity('/osr/giflib/ajax-loader.gif', local.lang.saving_rating, '#FFFFBB')
	
	jQuery.ajax({
		data: {
			sid: local.sid,
			com: local.com,
			project_id: local.project_id,
			page_id: local.page_id,
			mode: 'ajax_update_rating',
			rating: rating
		},
		success: function(json) {
			if (json != undefined) {
				if (json.status == 0) {
					rating_update_success(json);
				} else {
					set_rating_activity('/osr/icons/kde/crystalclear/16x16/actions/button_cancel.png', json.message, '#FFBBBB');
				}
			}
		},
		error: function() {
			set_rating_activity('/osr/icons/kde/crystalclear/16x16/actions/button_cancel.png', local.lang.lost_connection, '#FFBBBB');
		}
	});
};

function set_para_edit_status(para_id, status) {
	var jFrame = jQuery('div.wiki_div_para_code.para_id_'+para_id)
		.parents('td.wiki_td_paragraph:first');
	
	if (status == 0) {
		jFrame.removeClass('locked');
		jFrame.find('img.wiki_img_para_edit').removeClass('locked');
	} else {
		jFrame.addClass('locked');
		jFrame.find('img.wiki_img_para_edit').addClass('locked');
	}
	
	check_icons();
}

function set_para_lock_status(para_id, status) {
	var jFrame = jQuery('div.wiki_div_para_code.para_id_'+para_id)
		.parents('td.wiki_td_paragraph:first');
	
	if (status == 0) {
		jFrame.removeClass('locked');
		jFrame.find('img.wiki_img_para_lock').removeClass('locked');
	} else {
		jFrame.addClass('locked');
		jFrame.find('img.wiki_img_para_lock').addClass('locked');
	}
	
	check_icons();
}

function set_para_public_status(para_id, status) {
	var jFrame = jQuery('div.wiki_div_para_code.para_id_'+para_id)
		.parents('td.wiki_td_paragraph:first');
	
	if (status == 0) {
		jFrame.removeClass('unpublished');
		jFrame.find('img.wiki_img_para_publish').removeClass('unpublished');
		jFrame.find('img.wiki_img_hidden_notifier').removeClass('unpublished');
	} else {
		jFrame.addClass('unpublished');
		jFrame.find('img.wiki_img_para_publish').addClass('unpublished');
		jFrame.find('img.wiki_img_hidden_notifier').addClass('unpublished');
	}
	
	check_icons();
}

function set_modified() {
	var local = Core;
	local.wiki.modification = true;
	window.onbeforeunload = function() {
		return '';
	}
}

function reset_modified() {
	Core.wiki.modification = false;
	window.onbeforeunload = ''
}

function set_rating_activity(icon, text, color) {
	jQuery('div#wiki_div_rating_activity')
		.children('img.text_icon')
			.attr('src',icon)
			.end()
		.children('span#wiki_span_rating_activity')
			.text(text)
			.end()
		.css({
			backgroundColor: color
		})
		.show();
}

function sync_execute() {
	var local = Core;
    var pData = new Object;
    var size = 0;
    for (var key in local.wiki.sync.active) {
        pData[key] = local.wiki.sync.active[key];
        ++size;
    }
    
    //special treatment for autosave
    update_autosave_object();
    
    if (size > 0) {
        local.wiki.jAjax.ajax({
            data: {
                sid: local.sid,
                com: local.com,
                projectid: local.project_id,
                page_id: local.page_id,
                mode: 'sync',
                data: pData
            },
            success: function(json) {
            	jQuery('span#wiki_span_no_server').fadeOut('slow');
                for (var key in json) {
                    if (key == 'check_para_locks') {
                        update_multi_para_status(json[key]);
                    } else if (key == 'update_para_lock') {
                    	var result = json[key];
                    	if (result.status != 0) {
                    		var para_id = pData[key][1];
                    		var jFrame = jQuery('div.wiki_div_para_code.para_id_'+para_id)
                    			.parents('td.wiki_td_paragraph');
                    		jQuery('td.wiki_td_paragraph.active span#wiki_span_no_locking').show()
                    	} else {
                    		jQuery('td.wiki_td_paragraph.active span#wiki_span_no_locking').hide()
                    	}
                    } else if (key == 'check_para_versions') {
                    	replace_paragraph_versions(json[key]);
                    } else if (key == 'autosave') {
                    	if (json.autosave.status != 0) {
                    		jQuery('#wiki_span_no_autosave').css({display: 'block'});
                    	} else {
                    		jQuery('#wiki_span_no_autosave').hide();
                    	}
                    }
                }
            },
            error: function(objAJAXRequest, strError) {
            	jQuery('#wiki_span_no_autosave').hide();
            	jQuery('span#wiki_span_no_server').css({display: 'block'})
            }
        });
    }
}

function update_autosave_object() {
	var local = Core;
	if (local.wiki.sync.active.autosave !== undefined) {
		var autosave = local.wiki.sync.active.autosave;
		var Names = new Array();
		var Values = new Array();
		jQuery('td.wiki_td_paragraph.active div.wiki_div_para_editor :input').each(function() {
			var jThis = jQuery(this);
			var name = jThis.attr('name');
			var value = jThis.val();
			if (name !== undefined && name != '') {
				if (jThis.hasClass('wiki_textarea_tinyMCE')) { 
					value = tinyMCE.get(name).getContent();
				}
				Names.push(name);
				Values.push(value);
			}
		});
		autosave[3] = Names;
		autosave[4] = Values;
	}
}

function update_multi_para_status(json) {
	if (json.status == 0) {
		var list = json.values;
		for (var para_id in list) {
			set_para_edit_status(para_id, list[para_id].edit);
			set_para_lock_status(para_id, list[para_id].lock);
			set_para_public_status(para_id, list[para_id].unpublished);
		}
	}
};

var hexDigits = new Array
("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"); 

//Function to convert hex format to a rgb color
function rgb2hex(rgb) {
	rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
	if (typeof(rgb) != 'undefined' && rgb != '' && rgb != null) {
		return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
	}
}

function hex(x) {
return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
}
