// Check if the console object exists (which is does in Firefox and IE8) end create a dummy to make sure nothing fails on console calls.
if (typeof console == 'undefined') {
	var console = {
		info: function() {},
		dir: function() {},
		group: function() {},
		groupEnd: function() {}
	};
}


SF = {};

SF.serviceFile = {
	search : 'includes/search.php',
	gateway : '/appglobal/gateway/'
};

SF.Base = {

	debug: true,
	supportedBrowser: false,
	
	pre_init: function(){
		this.switchBodyClass();
		SF.Tooltips.init();
		this.contentMenu();
		this.settings();
	},
	
	settings: function(){
		if ($('body').find('.flash') != null) 
			this.getSWF();
		if ($('body').find('form') != null) 
			SF.Forms.init();
/*		if ($('body').find('.db_accordeon') != null) 
			this.db_accordeon(); */
		if ($('body').find('.wb_accordeon') != null) 
			this.wb_accordeon();
		if ($('body').find('#tfeed') != null) 
			SF.Base.tFeeds();
		this.addBindings();
	},
	
	addBindings: function(){
	
		$('.tabmenu li:not(".content .tabmenu li")').bind('click', function(oEvent){ SF.Tabs.handleClick(oEvent); });
		$('.icon.info, .btn_info_g').bind('mouseenter', function(oEvent){ SF.Tooltips.showTooltip(oEvent); });
		$('.icon.info, .btn_info_g').bind('mouseleave', function(){ SF.Tooltips.tooltip.hide(); });
		$('.get_started .btn_start').bind('click', function(oEvent){ oEvent.preventDefault(); SF.Base.toggleMenu(oEvent); });
		$('.btn_login').bind('click', function(oEvent){ oEvent.preventDefault(); SF.Login.open(); $('#startmenu').slideUp('fast'); $('.get_started .btn_start').removeClass('active'); });
		$('.icon.close').bind('click', function(oEvent){ SF.Base.closeEvent(oEvent); });
		$('.scal').live('click', function(oEvent){ oEvent.preventDefault(); SF.Scalable.init(oEvent); });
		$('.sf_scalable .icon.close').live('click', function(oEvent){ SF.Scalable._close(oEvent); });
		$('[data-rel]').live('click', function(oEvent){ SF.Base.handleEvent(oEvent); });
		$('#selectall').live('click', function(oEvent){ var oForm = $(this).parents('form'); SF.Forms.checkUncheck(oEvent, oForm); });
		$('.sf_panel.search .options select').bind('change', function(oEvent){ SF.SearchOptions.handleSelected(oEvent); });
		$('.pr_add').bind('click', function(oEvent){ SF.Profile.toggleProfile(oEvent); });
		$('.addprofileimg .btn_submit').live('click', function(oEvent){ SF.Application.addProfileImage(oEvent); });
        /* SF.Profile.resizeCropImage(); */
	},
	
	handleEvent: function(oEvent){
		var oElement = oEvent.currentTarget;
		
		if (!oElement.getAttribute('data-rel')) 
			return;
		
		var attr = oElement.getAttribute('data-rel');
		var oArgs = eval('(' + attr + ')');
		
		if (typeof oEvent != 'undefined') {
			if (typeof SF[oArgs.action] != 'object') {
				if (typeof SF.Base[oArgs.event] == 'function') {
					SF.Base[oArgs.event](oElement, oArgs.args);
				}
				else {
					console.info('No function found!');
				}
			}
			else {
				if (typeof SF[oArgs.action][oArgs.event] == 'function') {
					SF[oArgs.action][oArgs.event](oElement, oArgs.args);
				}
				else {
					console.info('No function found!');
				}
			}
		}
		else {
			console.info('Event is not an object');
		}
	},
	
	getSWF: function(){ // get swf based on id of html element. Triggers on class 'flash'. Width/height are set on html element
		var oEl = $('.flash');
		var elID, oParams;
		$.each(oEl, function(i){
			elID = $(this).attr('id');
			oParams = {
				swf: '/swf/' + elID + '.swf',
				width: '100%',
				height: '100%',
				wmode: 'transparent',
				hasVersion: 10,
				expressInstaller: '/static/swf/expressInstall.swf'
			};
			$('#' + elID).flash(oParams);
		});
	},
	
	contentMenu: function(){
		var url = this.checkUrl();
		var aItems = $('.sf_tabs.content .tabmenu a');
		$.each(aItems, function(i, item){
			var oTarg = item.href.split('/');
			if (oTarg[3] == url) {
				$(this).parent().addClass('selected');
			}
		});
	},
	
	accordeon: function(oEvent){
		var aEl = $('.accordeon').children('dt');
		
		$.each(aEl, function(i, el){
			var oContainer = $(this).parent('dl');
			
			$(this).click(function(){
				$('dt.selected', oContainer).removeClass('selected');
				$('dd.selected', oContainer).slideUp('fast');
				
				if ($(this).next('dd').is(':visible')) {
					$(this).removeClass('selected');
					$(this).next('dd').slideUp('fast').removeClass('selected');
				}
				else {
					$(this).addClass('selected');
					$(this).next('dd').slideDown('fast').addClass('selected');
				}
			});
		});
	},
	
	db_accordeon : function(oEvent){
		var aEl = oEvent.currentTarget;
		var parent = $(aEl).parent();
		var container = $(aEl).parents('ul');
						
		if($(parent).hasClass('selected')){
			$(parent).removeClass('selected');
			$('.content', parent).slideUp('fast');
		} else {
			$('li.selected', container).removeClass('selected');
			$('li.selected .content', container).slideUp('fast');
			$(parent).addClass('selected');
			$('.content', parent).slideDown('fast');
		}
	},
	
	wb_accordeon: function(){
		var aEl = $('.wb_accordeon').children('li').find('h3');
		
		if ($('.wb_accordeon').find('.selected')) {
			var initial = $('.wb_accordeon').find('.selected');
		}
		else {
			var initial = false;
		}
		
		$.each(aEl, function(i, el){
			var oContainer = $(this).parent().parent('ul');
			var oElParent = $(this).parent();
			
			if (initial) {
				$('.item_content', initial).slideDown('fast').addClass('selected');
			}
			
			$(this).click(function(){
				$('li.selected', oContainer).removeClass('selected');
				$('.item_content.selected', oContainer).slideUp("fast");
				
				if ($('.item_content', oElParent).is(':visible')) {
					$(oElParent).removeClass('selected');
					$('.item_content', oElParent).slideUp('fast').removeClass('selected');
				}
				else {
					$(oElParent).addClass('selected');
					$('.item_content', oElParent).slideDown('fast').addClass('selected');
				}
			});
		});
	},
	
	toggleMenu: function(oEvent){
		var oEl = $(oEvent.currentTarget);
		var oMenu = $(oEl).next('.sf_menu');
		
		if (oMenu && oMenu.is(':visible')) {
			oMenu.slideUp('fast');
			oEl.removeClass('active');
		}
		if (oMenu && !oMenu.is(':visible')) {
			oMenu.slideDown('fast');
			oEl.addClass('active');
		}
	},
	
	closeEvent: function(oEvent){ // "Close a screen" mechanism
		var oEl = $(oEvent.currentTarget);
		var oContainer = oEl.parent().parent().attr('id');
		switch (oContainer) {
			case 'sf_login':
				SF.Login.toggleLogin();
				break;
		}
	},
	
	checkBrowser: function(){
		$.each($.browser, function(i){
			//	if($.browser.msie && parseFloat($.browser.version) < 7) return;
			//	else SF.Base.supportedBrowser = true;
			SF.Base.supportedBrowser = true;
		});
	},
	
	switchBodyClass: function(){
		var url = this.checkUrl();
		if (url == 'view' || url == 'changepwd') {
			$('body').addClass('detail');
		}
	},
	
	checkUrl: function(){
		var url = window.location.pathname;
		if (url == '') 
			return '';
		if (url[0] = '/') 
			url = url.substring(1);
		var path = url.split('/');
		return path[0];
	},
	
	redirect: function(type, link){
		switch (type) {
			case 'direct':
				window.location.href = link;
				break;
				
			case 'timeout':
				setTimeout(function(){
					window.location.href = link;
				}, '3000');
				break;
				
			default:
				return;
				break;
		}
	},
	
	test: function(){
		alert('Test da thing!');
	},
	
	tweetQuestion: function(oArgs){
		$('#tweetQuestionForm .btn_submit').bind('click', function(oEvent){
			var aData = SF.Application.retrieveFormData(oArgs.form);
			var oRequest= {actions:[{action:'tweetQuestion',form:oArgs.form,data:aData,profession:oArgs.profession}]};
			SF.Application.appHandler(oEvent.currentTarget,oRequest);
		});
	},
	
	mailQuestion: function(oArgs){
		$('#mailQuestionForm .btn_submit').bind('click', function(oEvent){
			var aData = SF.Application.retrieveFormData(oArgs.form);
			var oRequest= {actions:[{action:'mailQuestion',form:oArgs.form,data:aData,profession:oArgs.profession}]};
			SF.Application.appHandler(oEvent.currentTarget,oRequest);
		});
	},
	
	tFeeds: function(){
		var oHtml = '';
		var feed;
		$.getJSON("http://twitter.com/statuses/user_timeline.json?screen_name=Sitefive&count=10&callback=?", function(data){
			$.each(data, function(i, item){
				feed = item.text;
				feed = feed.replace(/http:\/\/\S+/g, '<a href="$&" target="_blank">$&</a>');
				feed = feed.replace(/\s(@)(\w+)/g, ' @<a onclick="javascript:pageTracker._trackPageview(\'/outgoing/twitter.com/\');" href="http://twitter.com/$2" target="_blank">$2</a>');
				feed = feed.replace(/\s(#)(\w+)/g, ' #<a onclick="javascript:pageTracker._trackPageview(\'/outgoing/search.twitter.com/search?q=%23\');" href="http://search.twitter.com/search?q=%23$2" target="_blank">$2</a>');
				oHtml += '<li><div class="inner">'+ feed +'</div></li>';
				$('#tfeed ul').append(oHtml);
			});
			
		});
	},
	
	tellafellow : function(oArgs){
		alert('Tell somebody');
	},
	
	submit: function(oEvent, oArgs) {
		var oHandlingElement	= oEvent.currentTarget;
		var oFormData			= SF.Application.retrieveFormData(oArgs.form);
		var oRequest;
		
		if (typeof oArgs['action'] != 'undefined') {
			oRequest= {actions:[{action:oArgs.action,data:oFormData}]};
		} else {
			console.info('No action available');
		}

		SF.Application.appHandler(oHandlingElement, oRequest);
	}
};

SF.Application = {
	
	retrieveFormData: function(sForm) {
		var oFormData		= {};
		var aInputs 		= $('#' + sForm + ' input, #' + sForm + ' select, #' + sForm + ' textarea');
		var oInputElement	= {};
		var sInputName		= '';
		var sInputValue		= '';
		
		for (var iInput = 0; iInput < aInputs.length; iInput++) {
			oInputElement	= aInputs[iInput];
			sInputType		= oInputElement.getAttribute('type');
			sInputName		= oInputElement.getAttribute('name');
			sInputValue		= oInputElement.value;
			sInputClass		= oInputElement.getAttribute('class');
			
			if (sInputType == 'checkbox') {
				if (oInputElement.checked == false) {
					sInputValue = '';
				} else {
					if(oInputElement.name == 'is_active') {
						sInputValue = '1';
					} else {
						sInputValue	= oInputElement.value;
					}
				}
			}
			
			if (sInputType == 'radio') {
				var aRadio = document.getElementsByName(sInputName);
				for (var iRadio = 0; iRadio < aRadio.length; iRadio ++) {
					if (aRadio[iRadio].checked == true) sInputValue = aRadio[iRadio].value;
				}
			}
			
			if (typeof oFormData[sInputName] == 'string' && sInputType != 'radio') {
				var sOldValue	= oFormData[sInputName];
				oFormData[sInputName] = [];
				oFormData[sInputName][oFormData[sInputName].length] = sOldValue;
				oFormData[sInputName][oFormData[sInputName].length]	= sInputValue;
			} else if (typeof oFormData[sInputName] == 'object') {
				oFormData[sInputName][oFormData[sInputName].length]	= sInputValue;
			} else {
				oFormData[sInputName]	= sInputValue;
			}
			
			
		}

		return oFormData;
	},
	
	appHandler : function(oEvent, oRequest){
		var msgBox = $(oEvent).parents('form').find('.msg_box');
		var handleResponse = function(oData) {
			if(oData != null){
				if(oData.status == true) {
					if(typeof oData.action != 'undefined') {
						var oArgs = (oData.args != null) ? oData.args : '';
						SF[oData.action][oData.event](oArgs);
					} else {
						$(msgBox).hide().removeClass('false').addClass('true').html(oData.message).fadeIn('fast');
						if ((typeof oData.link != null) && (typeof oData.link != 'undefined')) SF.Base.redirect('timeout', oData.link);
					}
				}
				
				if(oData.deleted == true){
					SF.Base.redirect('direct', oData.link);
				}
				
				if (oData.status == false) {
					$(msgBox).hide().removeClass('true').addClass('false').html(oData.message).fadeIn('fast');
					if ((typeof oData.link != null) && (typeof oData.link != 'undefined')) SF.Base.redirect('timeout', oData.link);
				}
			}
		};
		
		$.post(SF.serviceFile.gateway, {request: $.toJSON(oRequest)}, handleResponse, 'json');
		
	},
	
	__loadTiny : function(oEvent, oArgs){
		if((oArgs == null) || (oArgs == 'undefined')) return;
		oParams = {};
		oParams.form = oArgs.form;
		oParams.theme = oArgs.theme;
		
		switch(oArgs.theme){
			case 'simple':{
				oParams.btn1 = '"|,bold,italic,underline,|,bullist,numlist,|,link,unlink"';
				oParams.btn2 = '';
				oParams.btn3 = '';
				oParams.btn4 = '';
				oParams.plugins = '';
				break;
			}
			
			case 'advanced':{
				oParams.btn1 = '"save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect"';
				oParams.btn2 = '"cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor"';
				oParams.btn3 = '"tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen"';
				oParams.btn4 = '"insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak"';
				oParams.plugins = '"pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,advlist"';
				break;
			}
		}
		
		SF.Application.__executeTiny(oEvent, oParams);
		
	},
	
	__executeTiny : function(oEvent, oArgs){
		if((oArgs == null) || (oArgs == 'undefined')) var oArgs = {};
		var oForm, oElement;
		if((oArgs.theme == null) || (oArgs.theme == 'undefined')){
			oArgs.btn1 = '"|,bold,italic,underline,|,bullist,numlist"';
			oArgs.btn2 = '';
			oArgs.btn3 = '';
			oArgs.btn4 = '';
			oArgs.plugins = '';	
		}
		
		if((oArgs.form == null) || (oArgs.form == 'undefined')){
			oForm = $(oEvent.currentTarget).parents('form');
		} else {
			oForm = oArgs.form;
		}
		
		if((oArgs.id == null) || (oArgs.id == 'undefined')){
			oElement = $('textarea.tinymce', oForm);
		} else {
			oElement = '#'+ oArgs.id;
		}
		
		
		$(oElement).tinymce({
			// Location of TinyMCE script
			script_url : '/js/tiny_mce/tiny_mce.js',

			// General options
			theme : "advanced",
			plugins : oArgs.plugins,

			// Theme options
			theme_advanced_buttons1 : oArgs.btn1,
			theme_advanced_buttons2 : oArgs.btn2,
			theme_advanced_buttons3 : oArgs.btn3,
			theme_advanced_buttons4 : oArgs.btn4,
			
			theme_advanced_toolbar_location : "top",
			theme_advanced_toolbar_align : "left",
			theme_advanced_statusbar_location : "bottom",
			theme_advanced_resizing : false,

			// Example content CSS (should be your site CSS)
			content_css : "css/type.css",

			// Drop lists for link/image/media/template dialogs
			template_external_list_url : "lists/template_list.js",
			external_link_list_url : "lists/link_list.js",
			external_image_list_url : "lists/image_list.js",
			media_external_list_url : "lists/media_list.js",

			// Replace values for the template plugin
			template_replace_values : {
				username : "Sitefive",
				staffid : "13111"
			}
		});
	},
	
	formConfig : function(form){
		var msgBox = $('#'+ form +' .msg_box');
		var oUrl = $('#'+ form).attr('action');
		
		var ajaxconfig = {
			url			: oUrl,
			target		: msgBox,
			dataType	: 	'json',	
			success		: function(data){
				SF.Forms.handleResponse(data, form);
			}
		};
		
		return ajaxconfig;
	},
	
	addProfileImage : function(oEvent){
		var oForm = $(oEvent.currentTarget).parents('form');
		
		if($('input[name=userfile]', oForm).val() != ''){
			var config = SF.Application.formConfig($(oForm).attr('id'));
			$(oForm).ajaxSubmit(config);
		}
		
	}
	
};

SF.Cookie = {
	
	setCookie : function(name,value,days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
	},
	
	getCookie: function(name) {
		var cName = name + "=";
		var arrCookie = document.cookie.split(';');
		for(var i=0;i < arrCookie.length;i++) {
			var aCookie = arrCookie[i];
			while (aCookie.charAt(0)==' ') aCookie = aCookie.substring(1,aCookie.length);
			if (aCookie.indexOf(cName) == 0) return aCookie.substring(cName.length,aCookie.length);
		}
		return null;
	},
	
	destroyCookie : function(name) {
		this.setCookie(name,"",-1);
	}
};

SF.Signup = {
	
	postSignup : function(oEvent, oArgs){
		var oForm = $('#'+ oArgs.form);
		var inv_value = $('#invitationcode', oForm).val();
		
		var invitation = (inv_value != '') ? inv_value : null;
		
		var oRequest = {actions:[{action:oArgs.action,data:invitation}]};
		SF.Application.appHandler(oEvent,oRequest);
		
	}
	
};

SF.Tabs = {
	selectedClass : 'selected',
	
	handleClick : function(oEvent) {
		var oElement = oEvent.currentTarget;
		var value = oElement.getAttribute('data-tab');
		if(value == '') return;
		if($(oElement).parent().parent().hasClass('top')) SF.Cookie.setCookie('db_tab',value,0);
		this.loadTab(oElement, value);
	},
	
	loadTab: function(oElement,value){
		var oContainer = oElement.parentNode;
		$(oContainer).children('li').each(function() {
			var rel = $(this).attr('data-tab');
			if(rel === value) {
				if(!$(this).hasClass('selected')) {
					$(this).addClass('selected');
					$('#'+rel).addClass('selected');
				}
			} else {
				if($(this).hasClass('selected')) {
					$(this).removeClass('selected');
					$('#'+rel).removeClass('selected');
				}
			}
		});
	},
	
	showTab : function(tab) {
		var aTabs = $('.tabmenu li');
		for(var t=0; t < aTabs.length; t++){
			var tValue = aTabs[t].getAttribute('data-tab');
			if (tab === tValue) {
				var menuContainer = aTabs[t].parentNode;
				var tabContainer = $(menuContainer).parent('.sf_tabs.top');
				$('.tabmenu', tabContainer).not('.tab .tabmenu', tabContainer).find('.selected').removeClass('selected');
				$('.tab.selected', tabContainer).not('.tab .tab.selected', tabContainer).removeClass('selected');
				$(aTabs[t]).addClass('selected');
				$('#' + tValue).addClass('selected');
			}	
		}
	}
	
};

SF.Tooltips = {
	debug : true,
	oTooltips : {},
	tooltip: false,
	
	init : function() {
		this.getTooltips();
		this.createTooltip();
	},
	
	getTooltips : function() {
		$.getJSON('/json/get_tooltips', function(data){
			if (data != null) {
					SF.Tooltips.oTooltips = data;
			}
		});
	},
	
	showTooltip : function(oEvent) {
		var oHandlingElement = oEvent.currentTarget;
		var oTooltips = this.oTooltips;
		
		if (oHandlingElement.getAttribute('data-tip')) {
			aRelation	= oHandlingElement.getAttribute('data-tip');
			iPos		= oEvent.pageX;
			iPosTop		= oEvent.pageY - 15;
			boxWidth	= ($('#sf_container').width()/2) + 100;
			
			if(iPos > boxWidth ) {
				iPosLeft = iPos - 320;
				$(this.tooltip).removeClass('tt_right').addClass('tt_left');
			} else {
				iPosLeft = iPos + 14;
				$(this.tooltip).removeClass('tt_left').addClass('tt_right');
			}
			
			if((typeof oTooltips != 'undefined' || typeof oTooltips != null) && (aRelation != null)) {
				$.each(oTooltips, function(i, item){
					if(item.id_object === aRelation) {
						$(SF.Tooltips.tooltip).find('.tooltip_content').html(item.display);
						$(SF.Tooltips.tooltip).css({left : iPosLeft, top : iPosTop, display : 'block'});
					}
				});
				
			} else if(this.debug) {
				console.info('No tooltip text defined for tooltip: ' + oHandlingElement.getAttribute('data-rel'));
			}
			
		} else if(this.debug) {
			oHandlingElement.style.border = '1px solid #DD0000';
			console.info('No "rel" attribute specified for binding tooltip to text. Marked tooltip with red border.');
		}
	},
	
	createTooltip : function() {
		if(!SF.Base.tooltip) {
			var sTooltip = $('<div></div>').addClass('popup tooltip').css({'display':'none'}).appendTo('body');
			SF.Tooltips.tooltip = sTooltip;
			$('<div></div>').addClass('pointer').appendTo(SF.Tooltips.tooltip);
			$('<span></span>').appendTo('.pointer');
			$('<span></span>').addClass('icon info').appendTo(SF.Tooltips.tooltip);
			$('<div></div>').addClass('tooltip_content').appendTo(SF.Tooltips.tooltip);
			$('<div></div>').addClass('tooltip_footer').appendTo(SF.Tooltips.tooltip);
			$('<span></span>').appendTo('.tooltip_footer');
		}
	}
};

SF.Login = {
	oContainer : $('#sf_login'),
	
	open : function() {
		this.toggleLogin();
	},
	
	
	toggleLogin : function() {

		var oEl = this.oContainer;
		
		if(oEl && oEl.is(':visible')) {
			oEl.slideUp('fast');
		}
		if(oEl && !oEl.is(':visible')) {
			oEl.slideDown('fast');
		}
	}
};

SF.Forms = {
	
	init : function() {
		this.processForm();
	},
	
	processForm : function(oForm) {
		if (typeof oForm == 'undefined') {
			var oForm = $('form');
		}
		$.each(oForm, function(i, form){
			var formId = $(form).attr('id');
			if(formId == null) return;
			SF.Forms.replaceInputs(formId);
			SF.Forms.handleValidation(formId);
		});
	},
	
	handleValidation : function(formId) {
		var config = SF.Application.formConfig(formId);		
		
		var formCheck = $('#'+ formId).validate({ 
			errorLabelContainer : $('#'+ formId +' .msg_box').addClass('false'),
			rules :  SF.Forms.formRules[formId],
			messages : SF.Forms.formMessages[formId],
			submitHandler : function(form) {
				$(form).ajaxSubmit(config);
			}
			
		});
	},
	
	handleResponse : function(data, formId) {
		var msgBox = $('#'+ formId +' .msg_box');
		if ((data != 'undefined') && (data != null)) {
			if (data.status == true) {
				$(msgBox).hide().removeClass('false').addClass('true').html(data.message).fadeIn('fast', function(){
					SF.Base.redirect('timeout', data.link);
				});
			}
			
			if (data.locked == true) {
				$(msgBox).hide().removeClass('true').addClass('false').html(data.message).fadeIn('fast', function(){
					SF.Base.redirect('timeout', data.link);
				});
			}
			
			if (data.status == false) {
				$(msgBox).hide().removeClass('true').addClass('false').html(data.message).fadeIn('fast');
				if ((typeof data.link != null) && (typeof data.link != 'undefined')) SF.Base.redirect('timeout', data.link);
			}
			
			if(data.subscription == true){
				SF.Base.redirect('direct', data.link);
			}
			
			if(data.subscription == false){
				SF.Base.redirect('direct', data.link);
			}
			
			if(data.image == true){
				$(msgBox).hide().removeClass('false').addClass('true').html(data.message).fadeIn('fast', function(){
					setTimeout(function(){
						/*
                        if(data.mode == 'enterprise'){
							SF.Base.redirect('direct', '/dashboard');
						} else {
							SF.Base.redirect('direct', '/profile');
						}
                        */
									
					    SF.Scalable._refresh({'name':'addimage','url':'/profile/profileimage/'+ data.mode +'', 'args':{}});
						return true; 
					}, '3000');
				});
			}
			
			if(data.image == false){
				$(msgBox).hide().removeClass('true').addClass('false').html(data.message).fadeIn('fast');
			}

            if(data.cropimage == true){
                window.location.reload(true);
                /*
                $(msgBox).hide().removeClass('false').addClass('true').html(data.message).fadeIn('fast', function(){
                    SF.Scalable._refresh({'name':'addimage','url':'/profile/profileimage/'+ data.mode +'', 'args':{}});
                    
                    setTimeout(function(){                       
                        SF.Scalable._refresh({'name':'resizecropimage','animation':false, 'position':'static', 'bWidth':'750','bHeight':'500','url':'/profile/resize_crop_image/'+ data.mode +'', 'args':{'action':'resizecropimage'}});
                        return true; 
                    }, '2000');
                });
                */
            }
            
            if(data.cropimage == false){
                $(msgBox).hide().removeClass('true').addClass('false').html(data.message).fadeIn('fast');
            }
			
		} else {
			console.info(data + ' could not be loaded');
		}
	},
	
	formRules : {
		
		loginForm : {
				username: {
					required: true,
					email: true
				
				},
				password: {
					required: true,
					minlength: 5
				}
		},
		lostpwForm : {
				lostpw : {
					required: true,
					email: true
				}
		},
		signupForm : {
				email :{
					required : true,
					email: true,
					minlength:5
				},
				email2: {
					required : true,
					equalTo: '#email2',
					minlength:5
				},
				firstname:{
					required : true,
					minlength : 2
				},
				surname:{
					required : true,
					minlength : 2
				},
                signup_password:{
                    required : true,
                    minlength : 5
                },
                signup_repeatpassword:{
                    equalTo: "#signup_password"
                },
				recaptcha_response_field : {
					required: true
				},
				terms: 'required'
		},
		profileForm : {
				name:{
					required : true,
					minlength : 2
				},
				surname:{
					required : true,
					minlength : 2
				},
				password: {
					minlength: 5
				},
				password2: {
					equalTo: '#password2',
					minlength: 5
				}
		},
		sendEmailForm : {
				subject : 'required',
				message : 'required'
		},
		contactForm : {
			name:{
				required : true,
				minlength : 2
			},
			email :{
				required : true,
				email: true,
				minlength:5
			},
			message : 'required'
		}
	},
	
	formMessages : {
		
		loginForm : {
				username: {
					required: 'Insert a valid emailaddress.',
					email: 'Insert a valid emailaddress.'
				},
				password: {
					required: 'Insert a pasword.',
					minlength: 'Insert at least 5 characters.'
				}
		},
		lostpwForm : {
				lostpw : {
					required: 'Insert a valid emailaddress.',
					email: 'Insert a valid emailaddress.'
				}
		},
		signupForm : {
				email :{
					required: 'Vul een geldig e-mailadres in.',
					minlength: 'Vul een geldig e-mailadres in.'
				},
				email2: {
					required: 'Vul een geldig e-mailadres in.',
					minlength: 'Vul een geldig e-mailadres in.',
					equalTo: 'Vul hetzelfde e-mailadres in als hierboven.'
				},
				firstname:{
					required : 'Vul je voornaam in.',
					minlength : 'Je voornaam moet tenminste 2 letters hebben.'
				},
				surname:{
					required : 'Vul je achternaam in.',
					minlength : 'Je achternaam moet tenminste 2 letters hebben.'
				},
                signup_password:{
                    required : 'Vul je wachtwoord in.',
                    minlength : 'Je wachtwoord moet tenminste 5 letters hebben.'
                },
                signup_repeatpassword:{
                    equalTo: 'Vul hetzelfde wachtwoord in als hierboven.'
                },
				recaptcha_response_field : {
					required: 'Vul de captcha code in'
				},
				terms: 'Accepteer de Algemene voorwaarden.'
		},
		profileForm : {
				name:{
					required : 'Vul je voornaam in.',
					minlength : 'Je voornaam moet tenminste 2 letters hebben.'
				},
				surname:{
					required : 'Vul je achternaam in.',
					minlength : 'Je achternaam moet tenminste 2 letters hebben.'
				},
				password: {
					minlength: 5
				},
				password2: {
					equalTo: '#password2',
					minlength: 5
				}
		},
		sendEmailForm : {
				subject : 'Vul een onderwerp in',
				message : 'Vul een bericht in'
		},
		contactForm : {
			name:{
				required : 'Vul je voornaam in.',
				minlength : 'Je voornaam moet tenminste 2 letters hebben.'
			},
			email :{
				required: 'Vul een geldig e-mailadres in.',
				minlength: 'Vul een geldig e-mailadres in.'
			},
			message : 'Vul een bericht in'
		}
	},
	
	clearDefaultValues : function(oEl) {
		
		$.each(oEl, function(i, el) {
			var elType = $(el).attr('type');
			if((elType != 'checkbox') && (elType != 'radio')) {
				var elDefault = $(el).val();
				if (elDefault != '') {
					$(el).focus(function(){
						if ($(el).hasClass('req')) 
							$(el).css({ 'background-color': '#FFF' });
						if (($(el).val() == elDefault) && (elType != 'password')) 
							$(el).val('');
					});
					$(el).blur(function(){
						if ($(el).val() == '') {
							if (($(el).hasClass('req')) && (elType != 'password')) 
								$(el).css({ 'background-color': '#F8D0D0' });
							$(el).val(elDefault);
						}
					});
				}
			} else {
				var elDefault = $(el).checked;
				if (elDefault != '') {
					$(el).focus(function(){
						if ($(el).hasClass('req')) 
							$(el).css({ 'background-color': '#F2F2F2' });
						if ($(el).val() == elDefault) 
							$(el).checked = false;
					});
					$(el).blur(function(){
						if ($(el).val() == '') {
							if ($(el).hasClass('req')) 
								$(el).css({ 'background-color': '#F8D0D0' });
							$(el).$(el).checked = elDefault;
						}
					});
				}
			}
		});
	},
	
	checkUncheck : function(oEvent, oForm) {
		var sEl = $(oEvent.currentTarget);
		(sEl.is(':checked')) ? $('input:checkbox:visible', oForm).attr('checked', true) : $('input:checkbox', oForm).attr('checked', false);
	},
	
	replaceInputs : function(oForm){
		var rElements = /submit|reset/i;
		var rSubmit = /submit/i;
		var btnTemplate = '<span class="$className"><span>$value</span></span>';
		var aInputs = $('#'+ oForm +' input');
	//	alert(oForm);
		
		$.each(aInputs, function(i, input){
			if(!rElements.test(this.type)) return;
			var rInput = $(this);
			var _btn = $(btnTemplate.replace(/\$([a-z]+)/gi, function(el, elAttr){ return input[elAttr] || '';} ));
			
			rInput.after(_btn).hide();
			
			var iType = rSubmit.test(this.type) ? 'submit' : 'reset';
			_btn.bind('click', function(oEvent){
				if(iType === 'submit') $(rInput).trigger('submit');
				else $(rInput).trigger(oEvent.type);
			});
		});
	}
		
};

SF.Scalable = {
	maxwidth	:	'958',
	aName		:	[],
	box			:	'',
	
	options : {
		animation		:	false,
		animationSpeed	:	500,
		dLeft			:	-9999,
		dTop			:	0,
		bLeft			:	0,
		bTop			:	0,
		bWidth			:	0,
		bHeight			:	0,
		zIndex			:	'999'
	},
	
	init : function(oEvent, oArgs) {        
		var oData = (oArgs != null) ? oArgs : eval('(' +$(oEvent.currentTarget).attr('data-scal') +')');
		var oEvent = (oArgs != null) ? oEvent: oEvent.currentTarget;
		
		var oArgs = this._config(oEvent, oData);
		if ($.inArray(oArgs.name,this.aName) > -1) {
			return;
		} else {
			this.aName.push(oArgs.name);
			this._open(oEvent, oArgs);
		}
	},
	
	_config : function(oEvent, oData) {
		var config = {};
		var oOptions = this.options;
		for(var option in oOptions) {
			config[option] = oOptions[option];
		} 
		for(var option in oData){
			config[option] = oData[option];
		}
		
		if(config.position == 'static') {
			var wdwWidth = $(window).width();
			var wdwHeight = $(window).height();
			
			var offsetX = wdwWidth/2;
			var offsetY = (wdwHeight/2 - config.bHeight/2);
			
			config.bLeft = Math.round((offsetX - config.bWidth/2)-20);
			config.bTop = offsetY;
		} else {
			var offset = $(oEvent).offset();
			config.dLeft = offset.left;
			config.dTop = $(oEvent).position().top;
			config.bLeft = offset.left - config.bLeft;
		} 
		
		return config;
	},
	
	_open : function(oEvent, oArgs) {
		this._create(oArgs);
		this._loadContent(oArgs);
		this._animate(oArgs);
	},
	
	_loadContent : function(oArgs) {
		var oData = {};
		this.showLoader();
		if(oArgs.url != null) {
			$.ajax({
				type: 'get',
				error: function(data) {
					alert('Error: ' +data);
				},
				success: function(data) {
					$('#'+ oArgs.name +' .content').html(data).fadeIn('50');
                    switch(oArgs.args.action){
                        case 'resizecropimage': 
                            SF.Profile.resizeCropImage();
                        break;
                        case 'workbookautocomplete':
                            SF.Workbook.setAutoComplete();
                        break;
                        default:
					        if(oArgs.args.action != null) SF.Scalable._applyFn(oArgs.args);
                    }
					SF.Scalable.hideLoader();
				},	
				url: oArgs.url,
				data:oData
			});
		} else {
			console.info('Error handling content');
		}
	},
	
	_refresh : function(oArgs){
		$('#'+ oArgs.name +' .content').fadeOut('50').html('');
		this._loadContent(oArgs);
	},
	
	_applyFn : function(oArgs) {
		var oData = (oArgs.args != null) ? oArgs.args : {};
		if(typeof SF[oArgs.action][oArgs.event] == 'function') SF[oArgs.action][oArgs.event](oData);
		else console.info('No function found');
	},
	
	_animate : function(oArgs) {
		$('#' + oArgs.name).css({ display: 'block' });
		if (oArgs.animation == true) {
			$('#' + oArgs.name).animate({ top: oArgs.bTop + 'px', left: oArgs.bLeft + 'px', width: oArgs.bWidth + 'px', 'min-height': oArgs.bHeight + 'px' }, 500);
			$('#' + oArgs.name + ' .contentcenter').animate({ width: oArgs.bWidth + 'px', 'min-height': oArgs.bHeight + 'px' }, 500);
		}
		else {
			if(oArgs.position == 'static') {
				$('#' + oArgs.name).css({ top: oArgs.bTop + 'px', left: oArgs.bLeft + 'px', width: oArgs.bWidth + 'px', 'min-height': oArgs.bHeight + 'px', position:'fixed' });
			} else {
				$('#' + oArgs.name).css({ top: oArgs.bTop + 'px', left: oArgs.bLeft + 'px', width: oArgs.bWidth + 'px', 'min-height': oArgs.bHeight + 'px' });
			}
			$('#' + oArgs.name + ' .contentcenter').css({ width: oArgs.bWidth + 'px', 'min-height': oArgs.bHeight + 'px' });
		}
	},
	
	_close : function(oEvent) {
		var sContainer = $(oEvent.currentTarget).parent().parent().attr('id');
		$('#'+ sContainer).find('.contentcenter').html('');
		this.aName.splice($.inArray(sContainer, this.aName), 1);
		$('#'+ sContainer).remove();
	},
	
	_create : function(oArgs) {
		var box = $('<div></div>').attr({'id': oArgs.name,'class':'sf_scalable'}).appendTo('body');
		$('<div></div>').addClass('topcenter').appendTo(box);
		$('<div></div>').addClass('edge topleft').appendTo('#'+ oArgs.name +' .topcenter');
		$('<div></div>').addClass('edge topright').appendTo('#'+ oArgs.name +' .topcenter');
		$('<div></div>').addClass('contentcenter').appendTo(box);
		$('<div></div>').addClass('edge centerleft left').appendTo('#'+ oArgs.name +' .contentcenter');
		$('<span></span>').addClass('icon close').appendTo('#'+ oArgs.name +' .contentcenter');
		$('<div></div>').addClass('content').appendTo('#'+ oArgs.name +' .contentcenter');
		$('<div></div>').addClass('sf_scalable_loader').appendTo('#'+ oArgs.name +' .contentcenter');
		$('<div></div>').addClass('edge centerright right').appendTo('#'+ oArgs.name +' .contentcenter');
		$('<div></div>').addClass('bottomcenter').appendTo(box);
		$('<div></div>').addClass('edge bottomleft').appendTo('#'+ oArgs.name +' .bottomcenter');
		$('<div></div>').addClass('edge bottomright').appendTo('#'+ oArgs.name +' .bottomcenter');
		
		$('#'+ oArgs.name).css({left:oArgs.dLeft + 'px', top:oArgs.dTop + 'px', display:'none', 'z-index':'999'});
	},
	
	showLoader : function() {
		$('.sf_scalable_loader').fadeIn('fast');
	},
	
	hideLoader : function() {
		$('.sf_scalable_loader').fadeOut('fast');
	}
};

SF.Scrollable = {

	initdone : false,
	currentpage : 0,
	pagemax : 10,

	__preinit : function() {
		if (this.initdone) return;
		this.initdone = true;
		$('.scrollbar .next').live('click', function(oEvent) { SF.Scrollable.movePage(+1); });
		$('.scrollbar .prev').live('click', function(oEvent) { SF.Scrollable.movePage(-1); });
		
	},
	
	movePage : function(pages) {
		var newpage = this.currentpage + pages;
		// allow for fast scrolling ;)
		if (newpage < 0) newpage = 0;
		if (newpage > this.pagemax) newpage = this.pagemax;		
		this.moveTo(newpage);		
	},
	
	moveTo : function(newpage) {
		if (this.currentpage == newpage) return; // already at the same page - why bother..
		if ($('.scrollable li').length) {
			var distance = -(newpage * ((40)))+'px'; 
			$('.scrollable ul').animate({ top: distance}, 400);
			this.currentpage = newpage;
		}
	}
	
};

SF.Profile = {
	
	addNetwork : function(oEvent, oArgs) {
		var oData = {};
		oData.user = oArgs.id;
		var aNetworks = $('#'+ oArgs.form +' input[type="text"]');
		var network = [];
		for(var n=0; n < aNetworks.length; n++){
			var name = aNetworks[n].getAttribute('name');
			var value = aNetworks[n].value;
			if(value != ''){
				var output = {'name':name,'value':value};
				network.push(output);
			}
		}
		oData.network = network;
		var oRequest = {actions:[{action:'addProNetwork',form:oArgs.form,data:oData,db:this.dashboard}]};
		SF.Application.appHandler(oEvent, oRequest);
	},
	
	removeNetwork : function(oEvent, oArgs){
		var oData = {};
		oData.user = oArgs.user;
		oData.network = oArgs.network;
		
		var oRequest = {actions:[{action:'removeProNetwork',form:oArgs.form,data:oData,db:this.dashboard}]};
		SF.Application.appHandler(oEvent, oRequest);
	},
	
	toggleProfile : function(oEvent){
		var oElement = oEvent.currentTarget;
		var sTarg = $('.vcard .profiles');
		if ($(oElement).hasClass('selected')) {
			$(sTarg).find('.edit').hide();
			$(oElement).removeClass('selected');	
		} else {
			$(sTarg).find('.edit').fadeIn('fast');
			$(oElement).addClass('selected');
		}
	},
    
    resizeCropImage: function (){
        $('.pane img').jrac({
          'crop_width': 110,
          'crop_height': 120,
          'crop_x': 20,
          'crop_y': 20,
          'viewport_onload': function() {
            var $viewport = this;
            var inputs = $viewport.$container.parent('.pane').find('.coords input:text');
            var events = ['crop_x','crop_y','crop_width','crop_height','image_width','image_height'];
            for (var i = 0; i < events.length; i++) {
              var event_name = events[i];
              // Register an event with an element.
              $viewport.observator.register(event_name, inputs.eq(i));
              // Attach a handler to that event for the element.
              inputs.eq(i).bind(event_name, function(event, $viewport, value) {
                $(this).val(value);
              })
              // Attach a handler for the built-in jQuery change event, handler
              // which read user input and apply it to relevent viewport object.
              .change(event_name, function(event) {
                var event_name = event.data;
                $viewport.$image.scale_proportion_locked = $viewport.$container.parent('.pane').find('.coords input:checkbox').is(':checked');
                $viewport.observator.set_property(event_name,$(this).val());
              });
            }
            $viewport.$container.append('<div>Image natual size: '
              +$viewport.$image.originalWidth+' x '
              +$viewport.$image.originalHeight+'</div>')
          }
        }).bind('viewport_events', function(event, $viewport) {
          var inputs = $(this).parents('.pane').find('.coords input');
          inputs.css('background-color',($viewport.observator.crop_consistent())?'chartreuse':'salmon');
        });
    }
};

SF.SearchOptions = {
	selected : null,
	
	postOptions : function(oEvent, oArgs) {

		if($(oEvent).hasClass('disabled')) return;
        
		var oData = this.getSelected(oArgs.form);
                
		if(oData.selected == null || oData.selected == '') {
			var oRequest = {actions:[{action:'noneselected',form:oArgs.form}]};
			SF.Application.appHandler(oEvent, oRequest);
			return;
		};
		
		this.resetSelected(oArgs.form);
		
		var oRequest = {actions:[{action:'postOptions',form:oArgs.form,request:oData.request,selected:oData.selected,db:this.dashboard}]};
		SF.Application.appHandler(oEvent, oRequest);
	},
	
	getSelected: function(oForm){
		var oForm = $('#'+ oForm);
		var oData  = {};
		oData.selected = [];
		oData.request = [];
		var aSelected = $('.options :selected', oForm);
		var aChecked = $('.smartresults ul :checked', oForm);
        
		for(var i=0; i < aSelected.length; i++) {
			if(aSelected[i].value != '') {
				oData.request.push(aSelected[i].value);                
			}
		}
		
		for(var i=0; i < aChecked.length; i++) {
			var wb = aChecked[i].getAttribute('data-rel');
			if (wb != null) {
				var userdata = {'id': aChecked[i].value, 'wb': wb};
				oData.selected.push(userdata);
			} else {
				oData.selected.push(aChecked[i].value);
			}
		}
		this.selected = oData.selected;

		return oData;
	},
	
	handleSelected: function(oEvent){
		var oElement = oEvent.currentTarget;
		var oForm = $(oElement).parents('form');
		var oBtn = $('.btn_submit', oForm);
		var aOption = $(oElement).val();    
		switch (aOption) {
		
			case 'addto':{
				if ($('select.receiver', oForm).is(':visible')) 
					$('.receiver', oForm).fadeOut('fast');
				if (!$(oBtn).hasClass('disabled')) 
					$(oBtn).addClass('disabled');   
				$('select[name="addto"]', oForm).fadeIn('fast');
				break;
			}
			
			case 'spreferred':{
				$(oBtn).removeClass('disabled');
				break;
			}
			
			default:{
				break;
			}
		}
	},	
	
	addPreferred : function(oArgs) {
		alert('Add user: '+ oArgs +' to preferred');
	},
	
	resetSelected : function(oArgs){
		var aChecked = $(':checked', oArgs);
		var aSelected = $(':selected', oArgs);
		
		for(var i=0; i < aChecked.length; i++) {
			aChecked[i].checked = false; 
		}
		
		for(var i=0; i < aSelected.length; i++) {
			aSelected[i].selected = false; 
		}
	}
};

SF.Mediation = {
	
	init : function() {
		this.addBindings();
	},
	
	addBindings : function() {
		$('#revise').bind('click', function(oEvent){ SF.Mediation.showRevise(); });
		$('#back').bind('click', function(oEvent){ SF.Mediation.showStart(); });
		$('.btn_submit').bind('click', function(oEvent){ SF.Base.handleEvent(oEvent); });
	},
	
	approveRequest : function(oEvent, oArgs){
		var oData= {};
		oData.id = oArgs.id;
		var oRequest = {actions:[{action:'acceptApproval',form:oArgs.form,data:oData}]};
		SF.Application.appHandler(oEvent, oRequest);
	},
	
	sendRevision : function(oEvent, oArgs){
		var oData = {};
		oData.oldid = oArgs.id;
		oData.appid = oArgs.appid;
		oData.datefrom = oArgs.date_from;
		oData.dateto = oArgs.date_to;
		oData.title = oArgs.title;
		oData.desc = $('#'+ oArgs.form +' #description').val();
		oData.email = oArgs.email;
		
		var oRequest = {actions:[{action:'sendRevision',form:oArgs.form,data:oData}]};
		SF.Application.appHandler(oEvent, oRequest);
	},
	
	acceptRevision : function(oEvent, oArgs){
		var oData = {};
		oData.oldid = oArgs.oldid;
		var oRequest = {actions:[{action:'acceptRevision',form:oArgs.form,data:oData}]};
		SF.Application.appHandler(oEvent, oRequest);
	},
	
	showRevise : function(){
		$('.mediation .start').hide();
		$('.mediation .revision').fadeIn('fast');
	},
	
	showStart : function(){
		$('.mediation .revision').hide();
		$('.mediation .start').fadeIn('fast');
	}	
};

