jQuery.noConflict();

/*
 * Because Internet Explorer is too frikin' stupid to actually have an indexOf method for arrays, we have to do it ourselves
 */
if(!Array.indexOf){
    Array.prototype.indexOf = function(obj){
        for(var i=0; i<this.length; i++){
            if(this[i]==obj){
                return i;
            }
        }
        return -1;
    }
}

// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
  var rest = this.slice((to || from) + 1 || this.length);
  this.length = from < 0 ? this.length + from : from;
  return this.push.apply(this, rest);
};

jQuery(document).ready(function() {
	var local = Core;
	
	if (typeof(local.error) != "undefined") {
		parse_dialog_error(local.error);
	}
	
	jQuery("#tabs").tabs();
	
	if (jQuery('div#webbook').size() > 0) { 
		document.getElementById('webbook').scrollIntoView(true);
	}
	jQuery.ajaxSetup({
		url: '/cgi-bin/apps/ajax/webbook',
		timeout: 10000,
		type: 'POST',
		dataType: 'json'
	});
	
	jQuery('.pulse').live('mouseover', function(){
		jQuery(this).stop(true, false);
		jQuery(this).animate({backgroundColor: '#C0C0C0'});
	})
	.live('mouseout', function(){
		jQuery(this).stop(true, false);
		jQuery(this).animate({backgroundColor:'#F1F1F1'});
	});
	
	jQuery('.webbookRecovery').click(function(){
		showRecovery();
	});
	
	jQuery('div#slider_hide').click(function(){
		if (jQuery(this).hasClass('closed')) {
			jQuery(this).removeClass('closed').addClass('open');
			jQuery('div#slider').slideDown(function(){
				loadSlider();
			});
		} else {
			jQuery(this).removeClass('open').addClass('closed');
			jQuery('div#slider').slideUp(function(){
			});
		}
	});
	
	jQuery('table#slider_table tr:first>td:not(.selected)>table').live('mouseover', function(){
		jQuery(this).stop(true, false);
		jQuery(this).animate({backgroundColor: '#C0C0C0'});
	})
	.live('mouseout', function(){
		jQuery(this).stop(true, false);
		jQuery(this).animate({backgroundColor:'#FFFFFF'});
	})
	.live('click', function() {
		var local = Core;
		var page = jQuery(this).parent().attr('id');
		window.location = local.AppLink+'&projectid='+local.projectid+'&page='+page+'&mode='+local.mode;
	});
	
	if (local.after_error != undefined) {
		errorHandling(local.after_error);
	}
	
	jQuery('input#current_page').change(load_page);
	jQuery('div#left_page_style, div#right_page_style').click(load_layout_editor)
	jQuery('li#layout_visible').click(function() {
		toggle_layout_visibility();
	});
	jQuery('li#cover_edit_button').click(show_cover_edit);
	jQuery('button#book_settings_cancel').click(hide_cover_edit);
	
	sync();
	
	initDragDrop();
	
	if (local.page == 1) {
		initBookSettings();
	}
	
	if (local.sync.autosave_textelement) {
		window.onbeforeunload = function() {
			return '';
		}
	}
	
	jQuery('form[name="save"]').bind('submit', function() {
		window.onbeforeunload = '';
	});
	
	if ((typeof(local.sync.recovery_found) != 'undefined') && (local.sync.recovery_found > 0) && (jQuery.cookie('no_recovery') == 'false')) {
		if (jQuery.cookie('autorecovery_hide') != 'yes') {
			dialog_recoveryAvailable(local.lang, []);
		};
		jQuery('li#webbook_recovery').show();
	};
	
	jQuery('li#webbook_recovery').live('click', function() {
		showRecovery();
	})
	
	if (local.sync.autosave_textelement) {
		jQuery(window).bind('unload', function() {
			jQuery.cookie('no_recovery', 'true');
			local.sync.autosave_destroy = true;
			sync(false);
		})
	} else {
		jQuery.cookie('no_recovery', 'false');
	}
	
	jQuery(window).bind('unload', function() {
		jQuery('div#dialog').remove();
	})
	
	jQuery('button.button, input.button, a.button').button();
	
	var request = null;
	//show preview
	jQuery('.project_iconlink').live('mouseenter', function(){
		var reference = jQuery(this).attr("href");
		reference = reference.split("?");
		reference = reference[1].split("&");
		var hashref = new Array();
		for (i=0;i<reference.length;i++) {
			var splitparam = reference[i].split("=");
			hashref[splitparam[0]] = splitparam[1];
		}
		var current_projectid = hashref["projectid"];
		
		var ajaxData = {
			sid: local.sid,
			mode: 'ajax_preview_webbook',
			projectid: current_projectid
		};
		request = jQuery.ajax({
							data: ajaxData,
							success: function(json) {
								var preview =		'<div class="webbook_preview_holder">'
												+		'<div class="webbook_preview">'
												+			'<div class="webbook_preview_bookLeft">&nbsp;</div>'
												+			'<div class="webbook_preview_bookMain">' + json.cover + '</div>'
												+		'</div>'
												+		'<div class="webbook_preview_link">'+ json.link +'</div>'
												+	'</div>';
								getSelectedObject(current_projectid, preview, json.background, json.width, json.height, json.side, json.content);
							}
						});
	});
	
	jQuery('.project_iconlink').live('mouseleave', function(event){
		if(null != request){
			request.abort();
			request = null;
		}
		event.preventDefault();
	});
	
	//hide preview
	jQuery('.webbook_preview_holder').live('mouseleave', function(){
		jQuery(this).fadeOut("slow");
		jQuery(this).remove();
	});

});

function getSelectedObject(projectid, preview, bg, width, height, side, content){
	jQuery('.project_iconlink').each(function(){
		var reference = jQuery(this).attr("href");
		reference = reference.split("?");
		reference = reference[1].split("&");
		var hashref = new Array();
		for (i=0;i<reference.length;i++) {
			var splitparam = reference[i].split("=");
			hashref[splitparam[0]] = splitparam[1];
		}
		var this_projectid = hashref["projectid"];
		if(this_projectid == projectid){
			jQuery(this).prepend(preview);
		}
		var totalHeight = (1.5 * height);
		var totalWidth = (2.2 * width);
		jQuery('.webbook_preview_holder').css({
			'position'			:	'absolute',
			'left'				:	'0',
			'zIndex'			:	'99999',
			'width'				:	totalWidth,
			'height'			:	totalHeight,
			'border'			:	'2px outset #000000',
			'backgroundColor'	:	'#FFFFFF',
			'paddingTop'		:	'10px',
			'display'			:	'none',
			'marginLeft'		:	'-120%'
		});
		
		jQuery('.webbook_preview').css({
			'marginTop'			:	'10px',
			'position'			:	'relative',
			'width'				:	width,
			'height'			:	height,
			'margin'			:	'0 auto'
		});
		
		jQuery('.webbook_preview_bookLeft').css({
			'position'			:	'relative',
			'float'				:	'left',
			'background'		:	'url(' + side + ')',
			'width'				:	'10%',
			'height'			:	height
		});
		
		jQuery('.webbook_preview_bookMain').css({
			'position'			:	'relative',
			'float'				:	'left',
			'background'		:	'url(' + bg + ')',
			'width'				:	'90%',
			'height'			:	height
		});
		
		jQuery('.webbook_preview_link').css({
			'paddingTop'		:	'10px',
			'position'			:	'relative'
		});
		
		jQuery('.webbook_preview_holder').fadeIn("slow");
	});
}

function brand(caller, pFrame, pType) {
	var brandingHeight = 96;
	var brandingWidth = 48;
	var parentHeight = jQuery(caller).height();
	var parentWidth = jQuery(caller).width();
	var marginTop = (parentHeight-brandingHeight)/2;
	var marginLeft = (parentWidth-brandingWidth)/2;
	var result = '<div class="frame_branding" style="margin-top:'+marginTop+'px; margin-left:'+marginLeft+'px;">' +
			'<img src="/osr/icons/keys/key_'+pFrame+'.png" alt="'+pFrame+'">';
	if (pType) {
		result += '<img src="/osr/icons/kde/webbook/48x48/type_'+pType+'.png" alt="'+pType+'">';
	}
	result += '</div>';
	return result;
}

function brandFrame() {
	var cclass = this.className;
	var frame = getFrame(cclass);
	var type = jQuery(this).children('input.type').val();
	var branding = brand(this, frame, type);
	jQuery(this).append(branding);
	
}

/*
 * This function turns 0 into 00, 1 into 01 and so on. It is used to display the time correctly
 */
function checktime(i) {
	if (i<10) {
		i="0" + i;
	}
	return i;
}

function errorHandling(error, options) {
	var local = Core;
	var lang = local.lang;
	if (typeof(options) == 'undefined') {
		options = new Array();
	}
	
	switch (error) {
		case 0: 
			// No worries!
			break;
		case 1: // happens when user is not allowed to view a Webbook
			dialog_noReadAccess(lang, options);
			break;
		case 2: //happens when user is not allowed to edit Webook
			dialog_noWriteAccess(lang, options);
			break;
		case 3: // happens when an error occurs at content type change
			dialog_contentChangeError(lang, options);
			break;
		case 4: // happens before content type is changed.
			dialog_confirmContentChange(lang, options);
			break;
		case 5: //happens when a page is locked
			options.push(local.pageBusyName);
			dialog_pageLocked(lang, options);
			break;
		case 6: //happens when a user cannot edit because sorting is active
			options.push(local.pageBusyName);
			dialog_pageLockedSorting(lang, options);
			break;
		default:
			//should only happen if a value is not defined! (ergo. never!)
			dialog_unknownError(lang);
	}
}

function eventTypeDrop(event, ui) {
	var local = Core;
	var draggable = ui.draggable[0];
	var content = jQuery(this).find('div.frame_content');
	var type = draggable.id; 
	type = type.split('_');
	type = type[1];
	
	var cclass = this.className;
	var frame = getFrame(cclass);
	
	var indentPage = 0;
	var parentDiv = jQuery(this).parents('div:first').attr('id');
	if (parentDiv == 'right_page') {
		++indentPage;
	}
	
	if (content.children().hasClass('empty')) {
		updateType(this, type, frame, indentPage);
	} else {
		var parameters = [this, type, frame, indentPage, local.page];
		errorHandling(4, parameters);
	}
}

function eventUpdateTypeComplete(caller, pData) {
	jQuery(caller)
		.find('img.ajax_loader')
			.remove()
			.end()
		.find('*')
			.show();
};

function eventUpdateTypeError(caller, pData) {
	errorHandling(3);
};

function eventUpdateTypeSuccess(caller, json, pData) {
	if (json.success == 0) {
		jQuery(caller).html(json.type_structure);
	}
};

function exitConfirm() {
	var local = Core;
	if (confirm('blub?')) {
		
		return true;
	} else {
		return false;
	}
};

function getFrame(pClass) {
	var cclass = pClass;
	cclass = cclass.match(/^content_\w{1}/); // search for content_?
	cclass = cclass[0];
	var frame = cclass.split('_');
	frame = frame[1];
	return frame
}

function GetHTTPParam(name) {  //Get Parameters through GET
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?((&amp;)|&)]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
};

function hide_cover_edit() {
	jQuery('div#book_settings').fadeOut();
	hide_cover_image_edit();
	return false;
}

function hide_cover_image_edit() {
	jQuery('div#book_settings div#cover_image_select').fadeOut(function() {
		jQuery('div#book_settings div.placeholder').fadeIn();
		resize_cover_image_edit();
	});
};

function initBookSettings() {
	jQuery('div#book_settings div.placeholder')
		.live('mouseenter', function() {
			jQuery(this)
				.css({
					outline: '1px  solid orange'
				})
				.children('img.placeholder_edit')
					.show();
		})
		.live('mouseleave', function() {
			jQuery(this)
				.css({
					outline: 'none'
				})
				.children('img.placeholder_edit')
					.hide();
		})
		.live('click', function() {
			show_cover_image_edit();
		});
		
	jQuery('div#book_settings button#remove_cover_image').live('click', function() {
		jQuery('input[name="image"]').val('');
		jQuery('div#book_settings img#edit_cover_image').attr('src', '/osr/icons/kde/ksnapshot.png');
		hide_cover_image_edit();
		//resize_cover_image_edit();
		jQuery('img#edit_cover_image').css({
			height: 'auto',
			width: 'auto'
		});
		jQuery('div.placeholder').css({
			height: 128,
			width: 128
		});
		return false;
	});
};

function initDragDrop () {
	jQuery('ul#left_menu>li').draggable({
		helper: 'clone',
		zIndex: 2000,
		start: function() {
			morphContent()
		},
		stop: function() {
			unMorphContent()
		}
	});
	
	jQuery('td.content_A, td.content_B, td.content_C, td.content_D').not('applet').droppable({
		accept: 'ul#left_menu>li',
		hoverClass: 'highlight',
		drop: eventTypeDrop
	})
};

function load_layout_editor() {
	var id = this.id;
	// resetting core from global to local speeds up further calls
	var local = Core;
	var projectid = local.projectid;
	var page = local.page;
	
	if (id.match(/right/)) {
		++page;
	}
	
	window.location = local.AppLink+'&projectid='+projectid+'&page='+page+'&mode=layout';
}

function load_page() {
	var page = this.value;
	// resetting core from global to local speeds up further calls
	var local = Core;
	var mode = local.mode;
	var projectid = local.projectid;
	
	window.location =local.AppLink+'&mode='+mode+'&projectid='+projectid+'&page='+page;
};

function loadSlider() {
	var local = Core;
	jQuery('div#slider').append('<img class="ajax_loader" alt="ajax-loader" src="/osr/giflib/ajax-loader.gif">');
	
	var ajaxData = {
		sid: local.sid,
		com: local.com,
		mode: 'ajax_load_slider',
		projectid: local.projectid
	};
	jQuery.ajax({
		data: ajaxData,
		complete: function() {
			jQuery('div#slider img.ajax_loader').remove();
		},
		success: function(json) {
			jQuery('table#slider_table tr:first').empty();
			jQuery('div#slider').animate({
				'height':json.height*1+18
			});
			var html = json.html;
			var length = html.length;
			for (var i = 0; i<length; ++i) {
				var index = i*1+1;
				var busyClass = '';
				if (json.locks[index] != 0) {
					if (index % 2 == 0) {
						json.locks[index+1] = 1;
					} else {
						json.locks[index-1] = 1;
					}
					busyClass = 'slider_busy';
				} 
				jQuery('table#slider_table tr:first').append(
					'<td id="'+(index)+'" class="slider_page '+busyClass+'" style="width: '+json.width+'px; height: '+json.height+'px;">' +
						html[i] +
					'</td>'
				);
			};
			jQuery('table#slider_table tr:first>td:even').css({
				'paddingRight':10
			});
			
			jQuery('table#slider_table tr:first>td')
				.eq(local.page-1)
					.addClass('selected')
					.end()
				.eq(local.page)
					.addClass('selected');
						
			updateSliderPosition(local.page);
		}
	});
}

function morphContent() {
	jQuery('div#pages')
		.find('table.page_content')
			.css({
				'height':'100%'
			})
			.find('td.content_A, td.content_B, td.content_C, td.content_D')
				.css({
					'border':'solid 1px'
				})
				.children('div')
					.hide()
					.end()
				.each(brandFrame);
}

function parseDateToFuzzy(timestamp) {
	var lang = Core.lang;
	
	var dayNames = [lang.sunday, lang.monday, lang.thuesday, lang.wednesday, lang.thursday, lang.friday, lang.saturday];
	var monthNames = [lang.january_short, lang.february_short, lang.march_short, lang.april_short, lang.may_short, lang.june_short, lang.july_short, lang.august_short, lang.september_short, lang.october_short, lang.november_short, lang.december_short];
	
	var backupDate = new Date();
	backupDate.setTime(timestamp);
	var todayDate=new Date();
	todayDate.setDate(todayDate.getDate());
	var todayBarrier = todayDate.toLocaleDateString();
	var yestDate=new Date();
	yestDate.setDate(yestDate.getDate()-1);
	var yestBarrier = yestDate.toLocaleDateString();
	var weekDate=new Date();
	weekDate.setDate(weekDate.getDate()-6);
	var yearDate=new Date();
	yearDate.setDate(yearDate.getDate()-360);
	var dateCompare = backupDate.toLocaleDateString();

	if (dateCompare == todayBarrier) {
		dateText = lang.today + ' - ' + checktime(backupDate.getHours())+':'+checktime(backupDate.getMinutes())+':'+checktime(backupDate.getSeconds());
	} else if (dateCompare == yestBarrier) {
		dateText = lang.yesterday + ' - ' + checktime(backupDate.getHours())+':'+checktime(backupDate.getMinutes())+':'+checktime(backupDate.getSeconds());
	} else if (backupDate > weekDate){
		dateText = dayNames[backupDate.getDay()] + ' - ' + checktime(backupDate.getHours())+':'+checktime(backupDate.getMinutes())+':'+checktime(backupDate.getSeconds());
	} else if (backupDate > yearDate) {
		dateText = monthNames[backupDate.getMonth()] + ' ' + backupDate.getDate() + ' - ' + checktime(backupDate.getHours())+':'+checktime(backupDate.getMinutes())+':'+checktime(backupDate.getSeconds());
	} else {
		dateText = backupDate.toLocaleDateString() + ' - ' + checktime(backupDate.getHours())+':'+checktime(backupDate.getMinutes())+':'+checktime(backupDate.getSeconds());
	}
	
	return dateText;
}

function resize_cover_image_edit() {
	var jCoverImage = jQuery('div#book_settings img#edit_cover_image');
	var image_height = jCoverImage.height();
	var image_width = jCoverImage.width();
	
	image_height<32 ? image_height = 32 :
			(image_height>160) ? image_height = 160 : image_height;
	image_width<32 ? image_width = 32 :
		(image_width>160) ? image_width = 160 : image_width;
	
	
	jQuery('div#book_settings div.placeholder').css({
		'height':image_height,
		'width': image_width,
		'marginLeft': image_width/2*-1
	});
}

function show_cover_edit() {
	jQuery('div#book_settings').fadeIn();
	resize_cover_image_edit();
}

function show_cover_image_edit() {
	var local = Core;
	jQuery('div#book_settings div.placeholder').fadeOut(function(){
		jQuery('div#book_settings div#cover_image_select')
		.fadeIn()
		.resourceBrowser({
			requestHandler: '/cgi-bin/apps/ajax/webbook',
			resourceLocation: '/resources/images',
			directoryRequest: {
				sid: local.sid,
				com: local.com,
				mode: 'resources_load_folders'
			},
			directoryContentRequest: {
				sid: local.sid,
				com: local.com,
				mode: 'resources_load_files'
			},
			onFolderSelected: function(directory) {
				jQuery('input[name="image_folder"]').val(directory);
			},
			onImageSelected: function(image, directory) {
				image = image.replace(/^tn_/,'');
				jQuery('input[name="image"]').val(image);
				jQuery('div#book_settings img#edit_cover_image').attr('src', '/resources/images/'+directory+'/'+image);
				hide_cover_image_edit();
			}
		});
	});
}

function sync(async) {
	var local = Core;
	var sync = local.sync;
	
	if (typeof(async) == 'undefined') {
		async = true;
	}
	
	if (sync.status) {	
		var ajaxData = {
			sid: local.sid,
			com: local.com,
			mode: 'sync',
			projectid: local.projectid,
			page: local.page
		}
		
		if (sync.lock) {
			ajaxData.sync_lock = 1;
		}
		
		if (sync.autosave_textelement) {
			if (sync.autosave_textelement_token != 'error') {
				var form = jQuery('form[name="save"]');
				ajaxData.sync_autosave = 1;
				ajaxData.textelement_title = form.find('input[name="title"]').val();
				ajaxData.textelement_text = form.find('textarea[name="text"]').val();
				ajaxData.file_token = sync.autosave_textelement_token;
				ajaxData.autosave_destroy = sync.autosave_destroy;
			} else {
				jQuery('td#autosave_status').html(
					'<p class="ui-state-error ui-corner-all">' +
						local.lang.autosave_off +
					'</p>'
				);
			};
		}
		
		var meow = jQuery.ajax({
			async: async,
			data: ajaxData,
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				removeRecovery();
				//dialog_noServer(local.lang, []);
				sync.autosave_textelement_token = 'error';
				sync.status = false;
			},
			timeout: function() {
				removeRecovery();
				//dialog_noServer(local.lang, []);
				sync.autosave_textelement_token = 'error';
				sync.status = false;
			},
			complete: function(XMLHttpRequest, textStatus) {
				if (XMLHttpRequest.status == 0) {
					//dialog_noServer(local.lang, []);
					sync.autosave_textelement_token = 'error';
					sync.status = false;
					jQuery('td#autosave_status').html(
						'<p class="ui-state-error ui-corner-all">' +
							local.lang.autosave_off +
						'</p>'
					);
				}
			}
		});
		
	}
	
	local.sync_timeout = setTimeout("sync();",45000);
}

function toggle_layout_visibility() {
	//Javascript error! But if you remove it, Webbook behaves wrong.
	//If you remove the entire thing, Webbook does nothing at all... go figure...
	var inactive = jQuery('div.layout_button').not('.active');
	var active = jQuery('div.layout_button.active');
	
	inactive.addClass('active').show('fast');
	active.removeClass('active').hide('fast');
}

function unMorphContent() {
	jQuery('div#pages')
		.find('td.content_A, td.content_B, td.content_C, td.content_D')
			.css({
				'border':'none'
			})
			.children('div.frame_branding')
				.empty()
				.remove()
				.end()
			.children('div')
				.show();
}

function updateSliderPosition(id) {
	id--;
	var position = jQuery('div#slider tr:first>td').eq(id).position();
	if (position != undefined) {
		var middle = jQuery('div#slider').width()/2-jQuery('div#slider td').eq(id).width()/2;
		var offset = position.left-middle
		jQuery('div#slider').animate({
			scrollLeft: '+='+offset
		});
	};
}

function updateType(caller, pType, pFrame, pIndentPage) {
	var local = Core;
	var page = local.page*1 + pIndentPage;
	
	var pData = {
		sid: local.sid,
		com: local.com,
		projectid: local.projectid,
		page: page,
		type: pType,
		element: pFrame,
		bookname: local.bookName,
		mode: 'ajax_type_save'
	};
	
	jQuery(caller)
		.append(
				'<img class="ajax_loader" alt="ajax-loader" src="/osr/giflib/ajax-loader.gif">'	
		)
		.find('*')
			.not('img.ajax_loader')
				.hide();
	
	jQuery.ajax({
		data: pData,
		complete: function() {
			eventUpdateTypeComplete(caller, pData)
		},
		success: function(json) {
			eventUpdateTypeSuccess(caller, json, pData)
		},
		error: function(XMLHttpRequest, textStatus, errorThrown) {
			eventUpdateTypeError(caller, pData)
		}
	});
}
