var loading		= '<img class="loading" src="/img/gen/spinner-s.gif" />';
var loadingDark	= '<img class="loading" src="/img/gen/spinner-black-xs.gif" />';
var timeout;
var timeout2;
var timeoutCountdown;
var timeouton	= 0;
var host		= 'http://www.jpopasia.com';
var hosti1		= 'http://i1.jpopasia.com';

$(document).ready(function(){
	// automatically open external links open in new window/tab
	$("a[rel='external']").attr('target','_blank');
	// crumb back
	$('#crumb_history').click(function(){
		history.back();
		// history.go(-1) == one page back
		return false;
	});
	// crumb forward
	$('#crumb_back').click(function(){
		history.forward();
		return false;
	});
	// check JS
	//$('.nojs').remove();
	// direct button click feedback
	$('li#store_link a, li#support_link a, li#nieuws_link a, li#account_link a:not([class=thickbox])').click(function(){
		$('#navi a').removeClass('current');
		$(this).addClass('current');
	});
	

	$('.readonly').live('click',function(){
		return false;
	});
	
	$('ul.hoverbg li').hover(function(){
		$(this).addClass('hover');
	},function(){
		$(this).removeClass('hover');
	});
	
	// IE "Object doesn't support this property or method" fix
	$( function () {
		$.ajaxSetup
				({ xhr: function() {
				if ($.browser.msie) {
					return new ActiveXObject("Microsoft.XMLHTTP");
				} else {
					return new XMLHttpRequest();
				}
			}
		})
	});
	
});


$.fn.popup = function(options) {
	options	= $.extend({
				title:'Title',
				content: '',
				relationid: false,
				footerContent:'',
				arrow:'',
				action:'click',
				position:'',
				type:'',
				value1:'',
				value2:'',
				value3:''
			}, options||{});

	return this.click(function(){
		$('#popup, object, .widget').remove(); // remove videos otherwise causes scrolling conflict
	
		if (options.content == '') { options.content = '<div style="text-align:center; margin-bottom:8px;">'+loading+'</div>'; }
		var offset			= $(this).offset();
		var elementHeight 	= $(this).outerHeight();
		var elementWidth 	= $(this).outerWidth();
		if (options.position == 'left') {
			var left			= offset.left + (elementWidth - 314);
			if (options.arrow == '') { options.arrow	= 'n-e'; }
		} else {
			var left			= offset.left;
			if (options.arrow == '') { options.arrow	= 'n-w'; }
		}
		var top				= offset.top + elementHeight + 5;		
		
		var popup	= '<div id="popup" style="top:'+top+'px;left:'+left+'px;">';
		popup		+= '<div class="popup-wrapper">';
		popup		+= 		'<h2 class="popup-title">'+options.title+'</h2>';
		popup		+= 		'<div class="popup-sep"></div>';
		popup		+= 		'<div class="popup-content"><p>'+options.content+'</p></div>';
		if (options.footerContent != '') {
			popup	+=		 '<div class="popup-footer">';
			popup	+= 			options.footerContent;
			popup	+= 		'</div>';
		}
		popup		+= 	'</div>	';
		popup		+= 	'<div class="popup-close"><a href="#">close</a></div>';
		popup		+= 	'<div class="popup-arrow-'+options.arrow+'"></div>';
		popup		+= '</div>';
		
		// checl if relationid
		if (options.relationid === true) {
			var relationid = $(this).attr('relationid');
		}
		
		// get ajax content
		if (options.type != '') {
			$.post('/ajax/dialog.php',{ type:options.type, value1:options.value1, value2:options.value2, value3:options.value3, relationID:relationid },function(cb){
				$('.popup-content').html(cb);
			});
		}
		
		$('#footerPlaceholder').after(popup);
			$('.popup-close').live('click',function(){
			$('#popup').remove(); return false;
		});
		
		return false;
	});
}	

// Add class on focus
function liveInputs(listener)
{
	$(listener + ' input, ' + listener + ' select, ' + listener + ' textarea').not('.noUpdate').each(function(){
		var orValue	= $(this).val();
		this.onchange = function(){
			thisInput	= this;
			
			var refid 	= $(thisInput).parents('tr, ul').attr('relations');
			var name	= $(thisInput).attr('name');
			var value	= $(thisInput).val();
			var type	= $(thisInput).attr('type');
			
			//console.log('refid = ' + refid + 'name = ' + name + 'value = ' + value + 'type = ' + type);
			
			// Check addon
			if (type == 'checkbox') {
				if (value == '0') { // parse as string for enum values
					value = '1';
				} else {
					value = '0';
				}
			}
			//say('refid' + refid + 'name' + name + 'value' + value + 'type' + type);
			// Add class to show it was edited
			$(this).removeClass('saved');
			$(this).addClass('edited')
			// Save changes to DB
			$.post('/ajax/live-inputs.php', { type:125114, value1:refid, value2:name, value3:value }, function(cb){
				var cbraw		= cb.split(';;');
				var status		= cbraw[0];
				var msg			= cbraw[1];
				if (msg == undefined || status == '' || !isNumeric(status)) { var status = '101'; var msg = cb; }
				switch (status) {
					case '101': $('#globalMessage').globalMessage({ color:'red', message:msg }); break;
					case '501': $('#globalMessage').globalMessage({ message:msg }); 
								// Change class to show succesfully saved
								setTimeout(function(){
									$(thisInput).removeClass('edited');
									$(thisInput).addClass('saved');
								}, 200); break;
				}
				// Save to value to current input to update the values for next requests
				$(thisInput).val(value);
				orValue = value;
			});
		}
	});
}

$.fn.exists = function(){return this.length>0;}

$.fn.readonly = function(options) {
	options		= $.extend({
					readonly: 1,
					type: 'input',
					removeclass:'green',
					addclass: 'black',
					elementvalue: ''
				}, options||{});
	thisElement	= this;	
	originalVal	= thisElement.val();
	if (options.elementvalue == '') {
		var displayVal 	= originalVal;
	} else {
		var displayVal	= options.elementvalue;
	}

	if (options.readonly == 1) {		
		// input
		if (options.type == 'input') {
			thisElement.attr('readonly', 'readonly').addClass('readonly').addClass(options.addclass).removeClass(options.removeclass).val(displayVal);
		}
		// textarea
		if (options.type == 'textarea') {
			thisElement.attr('readonly', 'readonly').addClass('readonly');
		}
		// anchor
		if (options.type == 'a') {
			thisElement.addClass('readonly '+options.addclass).removeClass(options.removeclass).html(displayVal);
		}
	} else { // remove readonly
		// input
		if (options.type == 'input') {
			thisElement.attr('readonly', '').removeClass('readonly').addClass(options.addclass).removeClass(options.removeclass).val(valueElement);
		}
		// textarea
		if (options.type == 'textarea') {
			thisElement.attr('readonly', '').addClass(options.addclass).removeClass('readonly '+options.removeclass).html(displayVal);;
		}
		// anchor
		if (options.type == 'a') {
			thisElement.removeClass('readonly '+options.removeclass).addClass(options.addclass).html(displayVal);
		}
	}
}

$.fn.insertAtCaret = function (myValue) {
    return this.each(function(){
        //IE support
        if (document.selection) {
                this.focus();
                sel = document.selection.createRange();
                sel.text = myValue;
                this.focus();
        }
        //MOZILLA/NETSCAPE support
        else if (this.selectionStart || this.selectionStart == '0') {
                var startPos = this.selectionStart;
                var endPos = this.selectionEnd;
                var scrollTop = this.scrollTop;
                this.value = this.value.substring(0, startPos) + myValue + this.value.substring(endPos,
				this.value.length);
                this.focus();
                this.selectionStart = startPos + myValue.length;
                this.selectionEnd = startPos + myValue.length;
                this.scrollTop = scrollTop;
        } else {
                this.value += myValue;
                this.focus();
        }
    });
};

/**
 * jQuery's Countdown Plugin
 *
 * display a countdown effect at given seconds, check out the following website for further information:
 * http://heartstringz.net/blog/posts/show/jquery-countdown-plugin
 *
 * @author Felix Ding
 * @version 0.1
 * @copyright Copyright(c) 2008. Felix Ding
 * @license http://www.opensource.org/licenses/bsd-license.php The BSD License
 * @date 2008-03-09
 * @lastmodified 2008-03-09 17:48    		 
 * @todo error & exceptions handling
 EXAMPLE:
 	$('span.countdown').countdown({seconds: 30});
	You can add an option called 'callback', like this:
	$('span.countdown').countdown({seconds: 30, callback: 'hello_world()'});
*/
$.fn.countdown = function(options) {
	/**
	 * app init
	*/	
	if(!options) options = '()';
	if(jQuery(this).length == 0) return false;
	var obj = this;	

	/**
	 * break out and execute callback (if any)
	 */
	if(options.seconds < 0 || options.seconds == 'undefined')
	{
		if(options.callback) eval(options.callback);
		return null;
	}

	/**
	 * recursive countdown
	 */
	timeoutCountdown = window.setTimeout(
		function() {
			jQuery(obj).html(String(options.seconds));
			--options.seconds;
			jQuery(obj).countdown(options);
		}
		, 1000
	);	

	/**
     * return null
     */
    return this;
}

$.fn.setOverlay = function(options) {
	// Extend options
	options = $.extend({
					status: 0
				}, options||{});
				
	// Function	
	// Turn on	
	if (options.status == 1) {
		var documentHeight 	= $(document).height();
		var documentWidth	= $(document).width();
		var loadingHeight 	= $(window).height() / 3;
		var loadingWidth 	= $(window).width() / 2;
		$('#screenOverlay').addClass('ui-widget-overlay').css( {'width': documentWidth + 'px', 'height': documentHeight + 'px', 'z-index':'1001'} );
		//$('#screenOverlay').html('<div style="margin: '+ loadingHeight +'px '+ loadingWidth +'px;"><img src="/img/gen/spinner-dark.gif" /></div>');
	}
	// Turn off
	if (options.status == 0) {
		$('#screenOverlay').removeClass('ui-widget-overlay').attr('style','');
		$('#screenOverlay').text('');
	}
}

$.fn.inputDesc = function(options) {
	// Extend options
	options = $.extend({
				description: 'change this description'
			}, options||{});
	// Assign this to var
	var thisInput		= this;
	// Assign default value to input field
	thisInput.val(options.description);
	// Check focus and blur
	thisInput.focus(function(){
		//thisInput.css('color','#333333');
		var inputValue = thisInput.val();
		if (inputValue == options.description) { // Value is same as default value so empty the value
			thisInput.val('');
		}
	});
	thisInput.blur(function(){
		//thisInput.css('color','#afafaf');
		var inputValue = thisInput.val();
		if (!inputValue) { // If no value is given, set the default value again
			thisInput.val(options.description);
		}
	});
}

$.fn.editable = function(url, callerSettings) {		
/*
examples:
$('.editTrigger').editable('/ajaxCalls/q.ajax.php', { saveType:2, maxlength:'30', width:'150px', editArea:'.editArea', load:'/ajaxCalls/q.ajax.php', loadType:4 });
$('.editSingle').editable('/ajaxCalls/q.ajax.php', { saveType:2, maxlength:'30', width:'150px' });
*/
// NOTE: always assign a linkid even if it's a single call. If you add another editable on the same page it will conflict otherwise
var options = $.extend({
		saveType:0,
		style:'editable',
		styleButtonSave:'small button green',
		styleButtonCancel:'small button black',
		width:'180px',
		save:'Save',
		cancel:'Cancel',
		maxlength:'155',
		inputType:'text',
		height:'80px',
		editArea:'',
		updateArea:'',
		loadArea:'',
		load: '',
		loadType: '',
		top: '0',
		left: '0'
	}, callerSettings || {});	

var textSaved = '';
	
return this.each(function(){

		var obj 		= $(this);
		var thisClick	= '';
		var linkid		= obj.attr('linkid');
		var editID		= linkid;
		var value3		= '';
		var value4		= '';
		
		value3			= obj.attr('value3');
		value4			= obj.attr('value4');
		
		if (!options.editArea) { // edit itself
			if (!options.load) {
				var textSaved 	= obj.html();
			} else {
				// perform ajax load data
				$.getJSON('/ajaxCalls/q.ajax.php', { type:options.loadType }, function(callback) {
					textSaved = callback.text;
				});
			}
		} else { // text area defined
			var editObj		= $(options.editArea + '[linkid=' + linkid + ']');
			if (options.loadArea) {
				var textSaved 	=  $(options.loadArea + '[linkid=' + linkid + ']').html();
			} else {
				if (!options.load) {
					var textSaved 	= editObj.html();
				} else {
					// perform ajax load data
					$.getJSON('/ajaxCalls/q.ajax.php', { type:options.loadType }, function(callback) {
						textSaved = callback.text;
					});
				}
			}
		}
		// trigger edit
		obj.click(function(){			
			thisClick	= $(this);
			// check if is in edit mode (show input fields) or not by assigning a class editMode
			if (!thisClick.hasClass('editMode-' + editID)) {
				thisClick.addClass('editMode-' + editID);
				// create edit input fields
				// return input text
				if (options.inputType == 'text') {
					var inputField	= '<input id="inputField-' + editID + '" class="' + options.style + '" style="padding:3px; width:' + options.width + ';" type="text" value="'+ textSaved +'" maxlength="' + options.maxlength + '" />';
				}
				// return textarea
				if (options.inputType == 'area') {
					var inputField	= '<textarea id="inputField-' + editID + '" class="' + options.style + '" style="padding:3px; width:' + options.width + '; height:' + options.height + '">' + textSaved + '</textarea>';
				}
				
				var btnSave		= '<input id="saveEdit-' + editID + '" class="' + options.styleButtonSave + '" type="submit" name="submit" style="padding: 3px; margin:0 5px;" value="' + options.save + '" />'; 
				var btnCancel	= '<input id="cancelEdit-' + editID + '" class="' + options.styleButtonCancel + '" type="button" name="cancel" style="padding: 3px; margin:0 5px;" value="' + options.cancel + '" />';
				// save the buttons to one var
				var showEditField	= '<div style="position:relative;"><div style="position:absolute; background-color:#ddd; padding:5px; border:1px solid #999; z-index:5; top:'+options.top+'px; left:'+options.left+'px;"><nobr> &nbsp; '+inputField + btnSave + btnCancel+'</nobr></div></div>';
				if (!options.editArea) { // no edit area given
					thisClick.html(showEditField);
				} else { // edit area given
					thisEditArea	= $(''+options.editArea+'[linkid=' + editID + ']');
					// check if there is no a active on parent
					if (thisEditArea.parent().is('a') ) {
						var cnt = $(thisEditArea).parent().contents() // copy content to cnt
						$(thisEditArea).parent().replaceWith(cnt); // replace the a
					}
					// display the edit buttons
					thisEditArea.html(showEditField);
					$('input#inputField-' + editID).focus();
				} 
			}
		
		});
		// save edit
		$('#saveEdit-' + editID).live('click', function(){
			// show loading when saving
			$('#saveEdit-' + editID).remove();
			$('#cancelEdit-' + editID).remove();
			$('#inputField-' + editID).after('<div class="spinner-s loadingEdit"></div>');
			var textValue = $('#inputField-' + editID).val();
			//console.log('textValue' + textValue + 'editID' + editID);
			obj.removeClass('editMode-' + editID);
			$.post(url, { type:options.saveType, value1:textValue, value2:editID, value3:value3, value4:value4 }, function(callback){
				if (options.updateArea) {
					$(options.updateArea+'[linkid=' + editID + ']').html(callback);
					if (options.editArea) {
						editObj.html('');
					}
				} else {
					if (!options.editArea) {
						obj.html(callback);
					} else {
						editObj.html(callback);
					}
				}
				$('.loadingEdit').remove();
			});
		});
		// cancel edit
		$('#cancelEdit-' + editID).live('click', function(){
			if (options.updateArea) {
				editObj.html('');
			} else {
				if (!options.editArea) {
					obj.html(textSaved);
				} else {
					editObj.html(textSaved);
				}
			}
			obj.removeClass('editMode-' + editID);
		});	
	});
	
};

$.fn.globalMessage = function(options) {
	// extend options
	options = $.extend({
					color: 'white',
					message: '',
					persistenceTime: 10000, // 0 is persistent
					speeddown: 500,
					speedup: 500,
					textColor: '#000000',
					transparency: '90',
					closebutton: '#globalMessage-close'
				}, options||{});
	// function
	var thisWrap		= this;
	
	return this.each(function(){
		if (options.message == '') {
			return false;
		}
		
		thisWrap.slideDown(options.speeddown); // show message
		// set main color
		if (options.color) {
			thisWrap.addClass(options.color);
		}
		// set timer
		if (options.persistenceTime > 0) { // hide message
			cancelTimeout();
			timeout = setTimeout(function(){
							thisWrap.slideUp(options.speedup);
						}, options.persistenceTime);
			$('#globalMessage').mouseover(function(){
				clearTimeout(timeoutTimer);
			}).mouseout(function(){
				timeout = setTimeout(function(){
							thisWrap.slideUp(options.speedup);
						}, options.persistenceTime);
			});
		}
		// set text color
		thisWrap.css( {'color':options.textColor,'opacity':'.'+options.transparency,filter:'Alpha(Opacity='+options.transparency+')' });
		// add close function
		thisWrap.html('<div id="globalMessage-close" class="hand"></div>' + options.message); // inject message
		$('#globalMessage-close').click(function(){
			thisWrap.slideUp(options.speedup);
		});
	});
}

$.fn.infiniteCarousel = function () {

    function repeat(str, num) {
        return new Array( num + 1 ).join( str );
    }
  
    return this.each(function () {
        var $wrapper = $('> div', this).css('overflow', 'hidden'),
            $slider = $wrapper.find('> ul'),
            $items = $slider.find('> li'),
            $single = $items.filter(':first'),
            
            singleWidth = $single.outerWidth(), 
            visible = Math.ceil($wrapper.innerWidth() / singleWidth), // note: doesn't include padding or border
            currentPage = 1,
            pages = Math.ceil($items.length / visible);            


        // 1. Pad so that 'visible' number will always be seen, otherwise create empty items
        if (($items.length % visible) != 0) {
           $slider.append(repeat('<li class="empty" />', visible - ($items.length % visible)));
           $items = $slider.find('> li');
        }

        // 2. Top and tail the list with 'visible' number of items, top has the last section, and tail has the first
        $items.filter(':first').before($items.slice(- visible).clone().addClass('cloned'));
        $items.filter(':last').after($items.slice(0, visible).clone().addClass('cloned'));
        $items = $slider.find('> li'); // reselect
        
        // 3. Set the left position to the first 'real' item
        $wrapper.scrollLeft(singleWidth * visible);
        
        // 4. paging function
        function gotoPage(page) {
          
            var dir = page < currentPage ? -1 : 1,
                n = Math.abs(currentPage - page),
                left = singleWidth * dir * visible * n;
         
            $wrapper.animate({
                scrollLeft : '+=' + left
            }, 25000, 'linear', function () {
           

                if (page == 0) {
                    $wrapper.scrollLeft(singleWidth * visible * pages);
                    page = pages;
                } else if (page > pages) {
                    $wrapper.scrollLeft(singleWidth * visible);
                    // reset back to start position
                    page = 1;
                }
                
                currentPage = page;
               gotoPage(currentPage + 1);
          
            });                
            
            return false;
        }  
       
        setTimeout(function(){
        	return gotoPage(currentPage + 1);
        }, 3000);
        
        // create a public interface to move to a specific page
        $(this).bind('goto', function (event, page) {
            gotoPage(page);
        });
    });  
};


/*
jQuery plugin : pause resume animation
Created by Joe Weitzel
BOX Creative LLC
http://plugins.jquery.com/project/Pause-Resume-animation
*/
jQuery.fn.startAnimation = function(  params, duration, easing, callback ) {
	jQuery(this).animate( params, duration, easing, callback );
	var data = { target:this.get(0), params: params, duration: duration, easing: easing, callback: callback,
				startTime: new Date().getTime(), timePlayed: 0, timeRemaining: 0 };
	if( !jQuery.pauseableAnimations ) {
		jQuery.extend({ pauseableAnimations: new Array( data ) });
	} else {
		for( var i in jQuery.pauseableAnimations ) {
			if( jQuery.pauseableAnimations[i].target == this.get(0) ) {
				jQuery.pauseableAnimations[i] = data;
			} else {
				jQuery.pauseableAnimations.push( data );
			};
		};
	};
};
jQuery.fn.pauseAnimation = function() {
	if( jQuery.pauseableAnimations ) {
		for(var i in jQuery.pauseableAnimations ) {
			if( jQuery.pauseableAnimations[i].target == this.get(0) ) {
				jQuery(this).stop();
				var now = new Date().getTime();
				var data = jQuery.pauseableAnimations[i];
				data.timePlayed += ( now - data.startTime );
				data.timeRemaining = data.duration - data.timePlayed;
				if( data.timePlayed > data.duration ) {
					var newArray = new Array();
					for( var p in jQuery.pauseableAnimations ) {
						if( jQuery.pauseableAnimations[p] != data ) newArray.push( jQuery.pauseableAnimations[p] );
					};
					jQuery.pauseableAnimations = newArray.length > 0 ? newArray : null;
					delete newArray;
					return this;
				};
				break;
			};
		};
	};
	return this;
};
jQuery.fn.resumeAnimation = function() {
	if( jQuery.pauseableAnimations ) {
		for(var i in jQuery.pauseableAnimations ) {
			var data = jQuery.pauseableAnimations[i];
			if( data.target == this.get(0) ) {
				this.animate( data.params, data.timeRemaining, data.easing, data.callback );
				data.startTime = new Date().getTime();
				return this;
			};
		};
	};
};


function cancelTimeout() {
	clearTimeout(timeout);
}

function getSearchResults(inputString, type) {
	var searchtype		= (type==''?'globalsearch':type);
	var searchField	 	= $('#global-searchresults');
	// Check string length and perform AJAX request
	if (inputString.length == 0) {
		$('#globalSearch').hide(); // Fade search results if string is empty
		$('#nav-search-loading').addClass('hidden');
	} else {
		cancelTimeout();
		timeout = $.post('/ajax/livesearch.php', { queryString:inputString, type:searchtype }, function(data) { // perform ajax call
			$('#global-searchresults').html(data); // Fetch results
			$('#nav-search-loading').addClass('hidden');
		});
	}
}

function scrollAnchor() {
	$('a[href*=#]:not([href=#])').click(function() {
		if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'')
		&& location.hostname == this.hostname) {
			var $target = $(this.hash);
			$target = $target.length && $target
			|| $('[name=' + this.hash.slice(1) +']');
			if ($target.length) {
				var targetOffset = $target.offset().top;
				$('html,body')
				.animate({scrollTop: targetOffset}, 1000);
				return false;
			}
		}
	});
}

function embedLogin() {
	var fields 			= $('form.embedLogin').serialize();
	var remember		= fields.indexOf('rememberLogin');
	var thisButton 		= $('#login [type=submit]').attr('disabled', 'enabled');
	var	passwordLogin	= $('input[name=passwordLogin]').val();
	var	emailLogin		= $('input[name=emailLogin]').val();
	if (remember != -1) {
		var	rememberLogin	= 1;
	} else {
		var	rememberLogin	= '';
	}
	$('.embedLoginFeedback').remove();

	/* Check if field is empty */
	if (!passwordLogin || !emailLogin) {
		alert('Fields were left empty.');
		$(thisButton).attr('disabled', '').removeClass('black').addClass('green');
		$('.loading').remove();
		return false;
	}

	/* Perform ajax login */
	$.post('/ajax/post.php', { type:12143, value1:passwordLogin, value2:emailLogin, value3:rememberLogin, value4:document.location.href  } , function(cb) {
		$(thisButton).attr('disabled', '');
		cbsplit		= cb.split(':^%#@:'); // must be unique because the reload url can contain any used split for urls
		var code	= parseInt(cbsplit[0]);
		var msg		= cbsplit[1]; 
		switch (code) {
			case 501:
				$('.loading').remove();
				//window.location = msg; // msg = last id
				//$('.embedLogin').remove();
				$('.afterLogin').fadeIn(1500);
				thisButton.after(msg);
				return false;
				break;
			case 101:
				$('.loading').after(msg);
				break;
		}
		$(thisButton).attr('disabled', '').removeClass('black').addClass('green');
		$('.loading').remove();
		return false;
	});
} 

function writeCookie(name, value, days) {
	// By default, there is no expiration so the cookie is temporary
	var expires = "";
	// If days is specified
	if (days) {
		var date 	= new Date();
		date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
		expires		= "; expires=" + date.toGMTString();
	}
	// Set the cookie to the name, value, and expiration date
	document.cookie	= name + "=" + value + expires + "; path=/";
}

function readCookie(name) {
	// Find cookie and return value
	var searchName 	= name + "=";
	var cookies 	= document.cookie.split(';');
	for(var i=0; i < cookies.length; i++) {
		var c		= cookies[i];
		while ( c.charAt(0) == ' ')
			c = c.substring(1, c.length);
		if (c.indexOf(searchName) == 0)
			return c.substring(searchName.length, c.length);
	}
	return null;
}

function eraseCookie(name) {
	writeCookie(name, "", -1);
}


function formLabel() {
	// catch every input field with label
	$("label[title]").each(function(){
		$(this).append("<div class=\"infopop\">");	
		titletext = $(this).attr("title");
		$(this).removeAttr("title");
		$(".infopop",this).css({opacity:0}).html(titletext);
		$("input",this).focus(function(){
			// Mouseover
			doFocus(this);
		}).blur(function(){
			// MouseOut
			doBlur(this);
		});
	});			
}

function objectHeight(selector) {
	// Get height of to fix object
	var heightObject 	= $(selector).height();
	return Math.round(heightObject);
}

function number_format( number, decimals, dec_point, thousands_sep ) {
    var n = number, prec = decimals;
    n = !isFinite(+n) ? 0 : +n;
    prec = !isFinite(+prec) ? 0 : Math.abs(prec);
    var sep = (typeof thousands_sep == "undefined") ? ',' : thousands_sep;
    var dec = (typeof dec_point == "undefined") ? '.' : dec_point;
 
    var s = (prec > 0) ? n.toFixed(prec) : Math.round(n).toFixed(prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;
 
    var abs = Math.abs(n).toFixed(prec);
    var _, i;
 
    if (abs >= 1000) {
        _ = abs.split(/\D/);
        i = _[0].length % 3 || 3;
 
        _[0] = s.slice(0,i + (n < 0)) +
              _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
 
        s = _.join(dec);
    } else {
        s = s.replace('.', dec);
    }
 
    return s;
}

function nl2br (str, is_xhtml) {
    var breakTag = '';
    breakTag = '<br />';
    if (typeof is_xhtml != 'undefined' && !is_xhtml) {
        breakTag = '<br>';
    }
    return (str + '').replace(/([^>]?)\n/g, '$1'+ breakTag +'\n');
}

function addslashes(str) {
	str=str.replace(/\\/g,'\\\\');
	str=str.replace(/\'/g,'\\\'');
	str=str.replace(/\"/g,'\\"');
	str=str.replace(/\0/g,'\\0');
	return str;
}

function stripslashes(str) {
	str=str.replace(/\\'/g,'\'');
	str=str.replace(/\\"/g,'"');
	str=str.replace(/\\0/g,'\0');
	str=str.replace(/\\\\/g,'\\');
	return str;
}

function isNumeric(input)
{
   return (input - 0) == input && input.length > 0;
}

function stopTimer() {
	clearTimeout(timeout);
	clearTimeout(timeoutCountdown);
}

/**
 * Function : dump()
 * Arguments: The data - array,hash(associative array),object
 *    The level - OPTIONAL
 * Returns  : The textual representation of the array.
 * This function was inspired by the print_r function of PHP.
 * This will accept some data as the argument and return a
 * text that will be a more readable version of the
 * array/hash/object that is given.
 * Docs: http://www.openjs.com/scripts/others/dump_function_php_print_r.php
 */
function dump(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";
	
	if(typeof(arr) == 'object') { //Array/Hashes/Objects 
		for(var item in arr) {
			var value = arr[item];
			
			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}

/*Lazy load plugin */
(function($){$.fn.lazyload=function(options){var settings={threshold:0,failurelimit:0,event:"scroll",effect:"show",container:window};if(options){$.extend(settings,options);}
var elements=this;if("scroll"==settings.event){$(settings.container).bind("scroll",function(event){var counter=0;elements.each(function(){if($.abovethetop(this,settings)||$.leftofbegin(this,settings)){}else if(!$.belowthefold(this,settings)&&!$.rightoffold(this,settings)){$(this).trigger("appear");}else{if(counter++>settings.failurelimit){return false;}}});var temp=$.grep(elements,function(element){return!element.loaded;});elements=$(temp);});}
this.each(function(){var self=this;if(undefined==$(self).attr("original")){$(self).attr("original",$(self).attr("src"));}
if("scroll"!=settings.event||undefined==$(self).attr("src")||settings.placeholder==$(self).attr("src")||($.abovethetop(self,settings)||$.leftofbegin(self,settings)||$.belowthefold(self,settings)||$.rightoffold(self,settings))){if(settings.placeholder){$(self).attr("src",settings.placeholder);}else{$(self).removeAttr("src");}
self.loaded=false;}else{self.loaded=true;}
$(self).one("appear",function(){if(!this.loaded){$("<img />").bind("load",function(){$(self).hide().attr("src",$(self).attr("original"))
[settings.effect](settings.effectspeed);self.loaded=true;}).attr("src",$(self).attr("original"));};});if("scroll"!=settings.event){$(self).bind(settings.event,function(event){if(!self.loaded){$(self).trigger("appear");}});}});$(settings.container).trigger(settings.event);return this;};$.belowthefold=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).height()+$(window).scrollTop();}else{var fold=$(settings.container).offset().top+$(settings.container).height();}
return fold<=$(element).offset().top-settings.threshold;};$.rightoffold=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).width()+$(window).scrollLeft();}else{var fold=$(settings.container).offset().left+$(settings.container).width();}
return fold<=$(element).offset().left-settings.threshold;};$.abovethetop=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).scrollTop();}else{var fold=$(settings.container).offset().top;}
return fold>=$(element).offset().top+settings.threshold+$(element).height();};$.leftofbegin=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).scrollLeft();}else{var fold=$(settings.container).offset().left;}
return fold>=$(element).offset().left+settings.threshold+$(element).width();};$.extend($.expr[':'],{"below-the-fold":"$.belowthefold(a, {threshold : 0, container: window})","above-the-fold":"!$.belowthefold(a, {threshold : 0, container: window})","right-of-fold":"$.rightoffold(a, {threshold : 0, container: window})","left-of-fold":"!$.rightoffold(a, {threshold : 0, container: window})"});})(jQuery);

/*
* TipTip
* Copyright 2010 Drew Wilson
* www.drewwilson.com
* code.drewwilson.com/entry/tiptip-jquery-plugin
*
* Version 1.3   -   Updated: Mar. 23, 2010
*/
(function($){$.fn.poptip=function(options){var defaults={activation:"hover",keepAlive:false,maxWidth:"200px",width:'auto',edgeOffset:3,defaultPosition:"bottom",delay:400,fadeIn:200,fadeOut:200,attribute:"title",content:false,enter:function(){},exit:function(){}};var opts=$.extend(defaults,options);if($("#tiptip_holder").length<=0){var tiptip_holder=$('<div id="tiptip_holder" style="max-width:'+opts.maxWidth+';"></div>');var tiptip_content=$('<div id="tiptip_content"></div>');var tiptip_arrow=$('<div id="tiptip_arrow"></div>');$("body").append(tiptip_holder.html(tiptip_content).prepend(tiptip_arrow.html('<div id="tiptip_arrow_inner"></div>')));}else{var tiptip_holder=$("#tiptip_holder");var tiptip_content=$("#tiptip_content");var tiptip_arrow=$("#tiptip_arrow");}
return this.each(function(){var org_elem=$(this);if(opts.content){var org_title=opts.content;}else{var org_title=org_elem.attr(opts.attribute);}
if(org_title!=""){if(!opts.content){org_elem.removeAttr(opts.attribute);}
var timeout=false;if(opts.activation=="hover"){org_elem.hover(function(){active_tiptip();},function(){if(!opts.keepAlive){deactive_tiptip();}});if(opts.keepAlive){tiptip_holder.hover(function(){},function(){deactive_tiptip();});}}else if(opts.activation=="focus"){org_elem.focus(function(){active_tiptip();}).blur(function(){deactive_tiptip();});}else if(opts.activation=="click"){org_elem.click(function(){active_tiptip();return false;}).hover(function(){},function(){if(!opts.keepAlive){deactive_tiptip();}});if(opts.keepAlive){tiptip_holder.hover(function(){},function(){deactive_tiptip();});}}
function active_tiptip(){opts.enter.call(this);tiptip_content.html(org_title);tiptip_holder.hide().removeAttr("class").css("margin","0");tiptip_arrow.removeAttr("style");$('#tiptip_holder').css({'maxWidth':opts.maxWidth});var top=parseInt(org_elem.offset()['top']);var left=parseInt(org_elem.offset()['left']);var org_width=parseInt(org_elem.outerWidth());var org_height=parseInt(org_elem.outerHeight());var tip_w=tiptip_holder.outerWidth();var tip_h=tiptip_holder.outerHeight();var w_compare=Math.round((org_width-tip_w)/2);var h_compare=Math.round((org_height-tip_h)/2);var marg_left=Math.round(left+w_compare);var marg_top=Math.round(top+org_height+opts.edgeOffset);var t_class="";var arrow_top="";var arrow_left=Math.round(tip_w-12)/2;if(opts.defaultPosition=="bottom"){t_class="_bottom";}else if(opts.defaultPosition=="top"){t_class="_top";}else if(opts.defaultPosition=="left"){t_class="_left";}else if(opts.defaultPosition=="right"){t_class="_right";}
var right_compare=(w_compare+left)<parseInt($(window).scrollLeft());var left_compare=(tip_w+left)>parseInt($(window).width());if((right_compare&&w_compare<0)||(t_class=="_right"&&!left_compare)||(t_class=="_left"&&left<(tip_w+opts.edgeOffset+5))){t_class="_right";arrow_top=Math.round(tip_h-13)/2;arrow_left=-12;marg_left=Math.round(left+org_width+opts.edgeOffset);marg_top=Math.round(top+h_compare);}else if((left_compare&&w_compare<0)||(t_class=="_left"&&!right_compare)){t_class="_left";arrow_top=Math.round(tip_h-13)/2;arrow_left=Math.round(tip_w);marg_left=Math.round(left-(tip_w+opts.edgeOffset+5));marg_top=Math.round(top+h_compare);}
var top_compare=(top+org_height+opts.edgeOffset+tip_h+8)>parseInt($(window).height()+$(window).scrollTop());var bottom_compare=((top+org_height)-(opts.edgeOffset+tip_h+8))<0;if(top_compare||(t_class=="_bottom"&&top_compare)||(t_class=="_top"&&!bottom_compare)){if(t_class=="_top"||t_class=="_bottom"){t_class="_top";}else{t_class=t_class+"_top";}
arrow_top=tip_h;marg_top=Math.round(top-(tip_h+5+opts.edgeOffset));}else if(bottom_compare|(t_class=="_top"&&bottom_compare)||(t_class=="_bottom"&&!top_compare)){if(t_class=="_top"||t_class=="_bottom"){t_class="_bottom";}else{t_class=t_class+"_bottom";}
arrow_top=-12;marg_top=Math.round(top+org_height+opts.edgeOffset);}
if(t_class=="_right_top"||t_class=="_left_top"){marg_top=marg_top+5;}else if(t_class=="_right_bottom"||t_class=="_left_bottom"){marg_top=marg_top-5;}
if(t_class=="_left_top"||t_class=="_left_bottom"){marg_left=marg_left+5;}
tiptip_arrow.css({"margin-left":arrow_left+"px","margin-top":arrow_top+"px"});tiptip_holder.css({"margin-left":marg_left+"px","margin-top":marg_top+"px"}).attr("class","tip"+t_class);if(timeout){clearTimeout(timeout);}
timeout=setTimeout(function(){tiptip_holder.stop(true,true).show();},opts.delay);}
function deactive_tiptip(){opts.exit.call(this);if(timeout){clearTimeout(timeout);}
tiptip_holder.hide();}}});}})(jQuery);

// AJAXFILEUPLOAD
(function(){var d=document,w=window;function get(element){if(typeof element=="string")
element=d.getElementById(element);return element;}
function addEvent(el,type,fn){if(w.addEventListener){el.addEventListener(type,fn,false);}else if(w.attachEvent){var f=function(){fn.call(el,w.event);};el.attachEvent('on'+type,f)}}
var toElement=function(){var div=d.createElement('div');return function(html){div.innerHTML=html;var el=div.childNodes[0];div.removeChild(el);return el;}}();function hasClass(ele,cls){return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));}
function addClass(ele,cls){if(!hasClass(ele,cls))ele.className+=" "+cls;}
function removeClass(ele,cls){var reg=new RegExp('(\\s|^)'+cls+'(\\s|$)');ele.className=ele.className.replace(reg,' ');}
if(document.documentElement["getBoundingClientRect"]){var getOffset=function(el){var box=el.getBoundingClientRect(),doc=el.ownerDocument,body=doc.body,docElem=doc.documentElement,clientTop=docElem.clientTop||body.clientTop||0,clientLeft=docElem.clientLeft||body.clientLeft||0,zoom=1;if(body.getBoundingClientRect){var bound=body.getBoundingClientRect();zoom=(bound.right-bound.left)/body.clientWidth;}
if(zoom>1){clientTop=0;clientLeft=0;}
var top=box.top/zoom+(window.pageYOffset||docElem&&docElem.scrollTop/zoom||body.scrollTop/zoom)-clientTop,left=box.left/zoom+(window.pageXOffset||docElem&&docElem.scrollLeft/zoom||body.scrollLeft/zoom)-clientLeft;return{top:top,left:left};}}else{var getOffset=function(el){if(w.jQuery){return jQuery(el).offset();}
var top=0,left=0;do{top+=el.offsetTop||0;left+=el.offsetLeft||0;}
while(el=el.offsetParent);return{left:left,top:top};}}
function getBox(el){var left,right,top,bottom;var offset=getOffset(el);left=offset.left;top=offset.top;right=left+el.offsetWidth;bottom=top+el.offsetHeight;return{left:left,right:right,top:top,bottom:bottom};}
function getMouseCoords(e){if(!e.pageX&&e.clientX){var zoom=1;var body=document.body;if(body.getBoundingClientRect){var bound=body.getBoundingClientRect();zoom=(bound.right-bound.left)/body.clientWidth;}
return{x:e.clientX/zoom+d.body.scrollLeft+d.documentElement.scrollLeft,y:e.clientY/zoom+d.body.scrollTop+d.documentElement.scrollTop};}
return{x:e.pageX,y:e.pageY};}
var getUID=function(){var id=0;return function(){return'ValumsAjaxUpload'+id++;}}();function fileFromPath(file){return file.replace(/.*(\/|\\)/,"");}
function getExt(file){return(/[.]/.exec(file))?/[^.]+$/.exec(file.toLowerCase()):'';}
Ajax_upload=AjaxUpload=function(button,options){if(button.jquery){button=button[0];}else if(typeof button=="string"&&/^#.*/.test(button)){button=button.slice(1);}
button=get(button);this._input=null;this._button=button;this._disabled=false;this._submitting=false;this._justClicked=false;this._parentDialog=d.body;if(window.jQuery&&jQuery.ui&&jQuery.ui.dialog){var parentDialog=jQuery(this._button).parents('.ui-dialog');if(parentDialog.length){this._parentDialog=parentDialog[0];}}
this._settings={action:'upload.php',name:'userfile',data:{},autoSubmit:true,responseType:false,onChange:function(file,extension){},onSubmit:function(file,extension){},onComplete:function(file,response){}};for(var i in options){this._settings[i]=options[i];}
this._createInput();this._rerouteClicks();}
AjaxUpload.prototype={setData:function(data){this._settings.data=data;},disable:function(){this._disabled=true;},enable:function(){this._disabled=false;},destroy:function(){if(this._input){if(this._input.parentNode){this._input.parentNode.removeChild(this._input);}
this._input=null;}},_createInput:function(){var self=this;var input=d.createElement("input");input.setAttribute('type','file');input.setAttribute('name',this._settings.name);var styles={'position':'absolute','margin':'-5px 0 0 -175px','padding':0,'width':'220px','height':'30px','fontSize':'14px','opacity':0,'cursor':'pointer','display':'none','zIndex':2147483583};for(var i in styles){input.style[i]=styles[i];}
if(!(input.style.opacity==="0")){input.style.filter="alpha(opacity=0)";}
this._parentDialog.appendChild(input);addEvent(input,'change',function(){var file=fileFromPath(this.value);if(self._settings.onChange.call(self,file,getExt(file))==false){return;}
if(self._settings.autoSubmit){self.submit();}});addEvent(input,'click',function(){self.justClicked=true;setTimeout(function(){self.justClicked=false;},3000);});this._input=input;},_rerouteClicks:function(){var self=this;var box,dialogOffset={top:0,left:0},over=false;addEvent(self._button,'mouseover',function(e){if(!self._input||over)return;over=true;box=getBox(self._button);if(self._parentDialog!=d.body){dialogOffset=getOffset(self._parentDialog);}});addEvent(document,'mousemove',function(e){var input=self._input;if(!input||!over)return;if(self._disabled){removeClass(self._button,'hover');input.style.display='none';return;}
var c=getMouseCoords(e);if((c.x>=box.left)&&(c.x<=box.right)&&(c.y>=box.top)&&(c.y<=box.bottom)){input.style.top=c.y-dialogOffset.top+'px';input.style.left=c.x-dialogOffset.left+'px';input.style.display='block';addClass(self._button,'hover');}else{over=false;if(!self.justClicked){input.style.display='none';}
removeClass(self._button,'hover');}});},_createIframe:function(){var id=getUID();var iframe=toElement('<iframe src="javascript:false;" name="'+id+'" />');iframe.id=id;iframe.style.display='none';d.body.appendChild(iframe);return iframe;},submit:function(){var self=this,settings=this._settings;if(this._input.value===''){return;}
var file=fileFromPath(this._input.value);if(!(settings.onSubmit.call(this,file,getExt(file))==false)){var iframe=this._createIframe();var form=this._createForm(iframe);form.appendChild(this._input);form.submit();d.body.removeChild(form);form=null;this._input=null;this._createInput();var toDeleteFlag=false;addEvent(iframe,'load',function(e){if(iframe.src=="javascript:'%3Chtml%3E%3C/html%3E';"||iframe.src=="javascript:'<html></html>';"){if(toDeleteFlag){setTimeout(function(){d.body.removeChild(iframe);},0);}
return;}
var doc=iframe.contentDocument?iframe.contentDocument:frames[iframe.id].document;if(doc.readyState&&doc.readyState!='complete'){return;}
if(doc.body&&doc.body.innerHTML=="false"){return;}
var response;if(doc.XMLDocument){response=doc.XMLDocument;}else if(doc.body){response=doc.body.innerHTML;if(settings.responseType&&settings.responseType.toLowerCase()=='json'){if(doc.body.firstChild&&doc.body.firstChild.nodeName.toUpperCase()=='PRE'){response=doc.body.firstChild.firstChild.nodeValue;}
if(response){response=window["eval"]("("+response+")");}else{response={};}}}else{var response=doc;}
settings.onComplete.call(self,file,response);toDeleteFlag=true;iframe.src="javascript:'<html></html>';";});}else{d.body.removeChild(this._input);this._input=null;this._createInput();}},_createForm:function(iframe){var settings=this._settings;var form=toElement('<form method="post" enctype="multipart/form-data"></form>');form.style.display='none';form.action=settings.action;form.target=iframe.name;d.body.appendChild(form);for(var prop in settings.data){var el=d.createElement("input");el.type='hidden';el.name=prop;el.value=settings.data[prop];form.appendChild(el);}
return form;}};})();

/* AUTOGROW
$('#wall-text').autogrow();
http://www.unwrongest.com/projects/elastic/ */
(function(jQuery){jQuery.fn.extend({autogrow:function(){var mimics=['paddingTop','paddingRight','paddingBottom','paddingLeft','fontSize','lineHeight','fontFamily','width','fontWeight'];return this.each(function(){if(this.type!='textarea'){return false;}
var $textarea=jQuery(this),$twin=jQuery('<div />').css({'position':'absolute','display':'none','word-wrap':'break-word'}),lineHeight=parseInt($textarea.css('line-height'),10)||parseInt($textarea.css('font-size'),'10'),minheight=parseInt($textarea.css('height'),10)||lineHeight*3,maxheight=parseInt($textarea.css('max-height'),10)||Number.MAX_VALUE,goalheight=0,i=0;if(maxheight<0){maxheight=Number.MAX_VALUE;}
$twin.appendTo($textarea.parent());var i=mimics.length;while(i--){$twin.css(mimics[i].toString(),$textarea.css(mimics[i].toString()));}
function setHeightAndOverflow(height,overflow){curratedHeight=Math.floor(parseInt(height,10));if($textarea.height()!=curratedHeight){$textarea.css({'height':curratedHeight+'px','overflow':overflow});}}
function update(){var textareaContent=$textarea.val().replace(/&/g,'&amp;').replace(/  /g,'&nbsp;').replace(/<|>/g,'&gt;').replace(/\n/g,'<br />');var twinContent=$twin.html();if(textareaContent+'&nbsp;'!=twinContent){$twin.html(textareaContent+'&nbsp;');if(Math.abs($twin.height()+lineHeight-$textarea.height())>3){var goalheight=$twin.height()+lineHeight;if(goalheight>=maxheight){setHeightAndOverflow(maxheight,'auto');}else if(goalheight<=minheight){setHeightAndOverflow(minheight,'hidden');}else{setHeightAndOverflow(goalheight,'hidden');}}}}
$textarea.css({'overflow':'hidden'});$textarea.keyup(function(){update();});$textarea.live('input paste',function(e){setTimeout(update,250);});update();});}});})(jQuery);

// LIMIT TEXTAREA VALUE
/*
You have <span id="charsLeft"></span> chars left.
<textarea id="myTextarea"></textarea>
<script type="text/javascript">
	$('#myTextarea').limit('140','#charsLeft');
</script>
*/
(function($){$.fn.extend({limit:function(limit,element)
{var interval,f;var self=$(this);$(this).focus(function(){interval=window.setInterval(substring,100)});$(this).blur(function(){clearInterval(interval);substring()});substringFunction="function substring(){ var val = $(self).val();var length = val.length;if(length > limit){$(self).val($(self).val().substring(0,limit));}";if(typeof element!='undefined')substringFunction+="if($(element).html() != limit-length){$(element).html((limit-length<=0)?'0':limit-length);}";substringFunction+="}";eval(substringFunction);substring()}})})(jQuery);

// HIGHLIGHT TEXT
/*
$('.body').highlight("acknowledgment");
$('.body').highlight(["matching","class name"]);
*/
(function($){$.fn.extend({highlight:function(h){function findText(a,b){if(a.nodeType==3)return searchText(a,b);else if(a.nodeType==1&&a.childNodes&&!(/(script|style)/i.test(a.tagName))){for(var i=0;i<a.childNodes.length;++i){i+=findText(a.childNodes[i],b)}}return 0}function searchText(a,b){var c=a.data.toUpperCase().indexOf(b);if(c>=0)return highlight(a,c,b);else return 0}function highlight(a,b,c){var d=document.createElement('span');d.className='highlight';var e=a.splitText(b);var f=e.splitText(c.length);var g=e.cloneNode(true);d.appendChild(g);e.parentNode.replaceChild(d,e);return 1}return this.each(function(){if(typeof h=='string')findText(this,h.toUpperCase());else for(var i=0;i<h.length;++i)findText(this,h[i].toUpperCase())})}})})(jQuery);

// LIVE AGO TICKER
/*
 * timeago: a jQuery plugin, version: 0.9 (2010-06-21)
 * @requires jQuery v1.2.3 or later
 *
 * Timeago is a jQuery plugin that makes it easy to support automatically
 * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
 *
 * For usage and examples, visit:
 * http://timeago.yarp.com/
 */
(function($){$.timeago=function(timestamp){if(timestamp instanceof Date)return inWords(timestamp);else if(typeof timestamp=="string")return inWords($.timeago.parse(timestamp));else return inWords($.timeago.datetime(timestamp));};var $t=$.timeago;$.extend($.timeago,{settings:{refreshMillis:60000,allowFuture:false,strings:{prefixAgo:null,prefixFromNow:null,suffixAgo:"ago",suffixFromNow:"from now",seconds:"less than a minute",minute:"about a minute",minutes:"%d minutes",hour:"about an hour",hours:"about %d hours",day:"a day",days:"%d days",month:"about a month",months:"%d months",year:"about a year",years:"%d years",numbers:[]}},inWords:function(distanceMillis){var $l=this.settings.strings;var prefix=$l.prefixAgo;var suffix=$l.suffixAgo;if(this.settings.allowFuture){if(distanceMillis<0){prefix=$l.prefixFromNow;suffix=$l.suffixFromNow;} distanceMillis=Math.abs(distanceMillis);} var seconds=distanceMillis/1000;var minutes=seconds/60;var hours=minutes/60;var days=hours/24;var years=days/365;function substitute(stringOrFunction,number){var string=$.isFunction(stringOrFunction)?stringOrFunction(number):stringOrFunction;var value=($l.numbers&&$l.numbers[number])||number;return string.replace(/%d/i,value);} var words=seconds<45&&substitute($l.seconds,Math.round(seconds))||seconds<90&&substitute($l.minute,1)||minutes<45&&substitute($l.minutes,Math.round(minutes))||minutes<90&&substitute($l.hour,1)||hours<24&&substitute($l.hours,Math.round(hours))||hours<48&&substitute($l.day,1)||days<30&&substitute($l.days,Math.floor(days))||days<60&&substitute($l.month,1)||days<365&&substitute($l.months,Math.floor(days/30))||years<2&&substitute($l.year,1)||substitute($l.years,Math.floor(years));return $.trim([prefix,words,suffix].join(" "));},parse:function(iso8601){var s=$.trim(iso8601);s=s.replace(/\.\d\d\d/,"");s=s.replace(/-/,"/").replace(/-/,"/");s=s.replace(/T/," ").replace(/Z/," UTC");s=s.replace(/([\+-]\d\d)\:?(\d\d)/," $1$2");return new Date(s);},datetime:function(elem){var isTime=$(elem).get(0).tagName.toLowerCase()=="time";var iso8601=isTime?$(elem).attr("datetime"):$(elem).attr("title");return $t.parse(iso8601);}});$.fn.timeago=function(){var self=this;self.each(refresh);var $s=$t.settings;if($s.refreshMillis>0){setInterval(function(){self.each(refresh);},$s.refreshMillis);} return self;};function refresh(){var data=prepareData(this);if(!isNaN(data.datetime)){$(this).text(inWords(data.datetime));} return this;} function prepareData(element){element=$(element);if(!element.data("timeago")){element.data("timeago",{datetime:$t.datetime(element)});var text=$.trim(element.text());if(text.length>0)element.attr("title",text);} return element.data("timeago");} function inWords(date){return $t.inWords(distance(date));} function distance(date){return(new Date().getTime()-date.getTime());} document.createElement("abbr");document.createElement("time");})(jQuery);

// ----------------------------------------------------------------------------
// markItUp! Universal MarkUp Engine, JQuery plugin
// v 1.1.7
// Dual licensed under the MIT and GPL licenses.
// ----------------------------------------------------------------------------
// Copyright (C) 2007-2010 Jay Salvat
// http://markitup.jaysalvat.com/
// ----------------------------------------------------------------------------
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(3($){$.23.T=3(f,g){B k,v,A,F;v=A=F=l;k={D:\'\',12:\'\',U:\'\',1j:\'\',1y:7,24:\'25\',1k:\'~/2R/1z.1A\',1b:\'\',26:\'27\',1l:7,1B:\'\',1C:\'\',1D:{},1E:{},1F:{},1G:{},28:[{}]};$.V(k,f,g);2(!k.U){$(\'2S\').1c(3(a,b){1H=$(b).14(0).2T.2U(/(.*)2V\\.2W(\\.2X)?\\.2Y$/);2(1H!==29){k.U=1H[1]}})}4 G.1c(3(){B d,u,15,16,p,H,L,P,17,1m,w,2a,M,18;d=$(G);u=G;15=[];18=l;16=p=0;H=-1;k.1b=1d(k.1b);k.1k=1d(k.1k);3 1d(a,b){2(b){4 a.W(/("|\')~\\//g,"$1"+k.U)}4 a.W(/^~\\//,k.U)}3 2b(){D=\'\';12=\'\';2(k.D){D=\'D="\'+k.D+\'"\'}8 2(d.1I("D")){D=\'D="T\'+(d.1I("D").2c(0,1).2Z())+(d.1I("D").2c(1))+\'"\'}2(k.12){12=\'N="\'+k.12+\'"\'}d.1J(\'<z \'+12+\'></z>\');d.1J(\'<z \'+D+\' N="T"></z>\');d.1J(\'<z N="30"></z>\');d.2d("2e");17=$(\'<z N="31"></z>\').2f(d);$(1K(k.28)).1L(17);1m=$(\'<z N="32"></z>\').1M(d);2(k.1l===7&&$.X.33!==7){1l=$(\'<z N="34"></z>\').1M(d).1e("1N",3(e){B h=d.2g(),y=e.2h,1n,1o;1n=3(e){d.2i("2g",35.36(20,e.2h+h-y)+"37");4 l};1o=3(e){$("1A").1O("2j",1n).1O("2k",1o);4 l};$("1A").1e("2j",1n).1e("2k",1o)});1m.2l(1l)}d.2m(1P).38(1P);d.1e("1Q",3(e,a){2(a.1p!==l){14()}2(u===$.T.2n){Y(a)}});d.1f(3(){$.T.2n=G})}3 1K(b){B c=$(\'<Z></Z>\'),i=0;$(\'C:2o > Z\',c).2i(\'39\',\'q\');$.1c(b,3(){B a=G,t=\'\',1q,C,j;1q=(a.19)?(a.1R||\'\')+\' [3a+\'+a.19+\']\':(a.1R||\'\');19=(a.19)?\'2p="\'+a.19+\'"\':\'\';2(a.2q){C=$(\'<C N="3b">\'+(a.2q||\'\')+\'</C>\').1L(c)}8{i++;2r(j=15.6-1;j>=0;j--){t+=15[j]+"-"}C=$(\'<C N="2s 2s\'+t+(i)+\' \'+(a.3c||\'\')+\'"><a 3d="" \'+19+\' 1q="\'+1q+\'">\'+(a.1R||\'\')+\'</a></C>\').1e("3e",3(){4 l}).2t(3(){4 l}).1N(3(){2(a.2u){3f(a.2u)()}2v(3(){Y(a)},1);4 l}).2o(3(){$(\'> Z\',G).3g();$(E).3h(\'2t\',3(){$(\'Z Z\',17).2w()})},3(){$(\'> Z\',G).2w()}).1L(c);2(a.2x){15.3i(i);$(C).2d(\'3j\').2l(1K(a.2x))}}});15.3k();4 c}3 2y(c){2(c){c=c.3l();c=c.W(/\\(\\!\\(([\\s\\S]*?)\\)\\!\\)/g,3(x,a){B b=a.1S(\'|!|\');2(F===7){4(b[1]!==2z)?b[1]:b[0]}8{4(b[1]===2z)?"":b[0]}});c=c.W(/\\[\\!\\[([\\s\\S]*?)\\]\\!\\]/g,3(x,a){B b=a.1S(\':!:\');2(18===7){4 l}1T=3m(b[0],(b[1])?b[1]:\'\');2(1T===29){18=7}4 1T});4 c}4""}3 I(a){2($.3n(a)){a=a(P)}4 2y(a)}3 1g(a){J=I(L.J);1a=I(L.1a);Q=I(L.Q);O=I(L.O);2(Q!==""){q=J+Q+O}8 2(m===\'\'&&1a!==\'\'){q=J+1a+O}8{q=J+(a||m)+O}4{q:q,J:J,Q:Q,1a:1a,O:O}}3 Y(a){B b,j,n,i;P=L=a;14();$.V(P,{1r:"",U:k.U,u:u,m:(m||\'\'),p:p,v:v,A:A,F:F});I(k.1B);I(L.1B);2(v===7&&A===7){I(L.3o)}$.V(P,{1r:1});2(v===7&&A===7){R=m.1S(/\\r?\\n/);2r(j=0,n=R.6,i=0;i<n;i++){2($.3p(R[i])!==\'\'){$.V(P,{1r:++j,m:R[i]});R[i]=1g(R[i]).q}8{R[i]=""}}o={q:R.3q(\'\\n\')};11=p;b=o.q.6+(($.X.1U)?n:0)}8 2(v===7){o=1g(m);11=p+o.J.6;b=o.q.6-o.J.6-o.O.6;b-=1s(o.q)}8 2(A===7){o=1g(m);11=p;b=o.q.6;b-=1s(o.q)}8{o=1g(m);11=p+o.q.6;b=0;11-=1s(o.q)}2((m===\'\'&&o.Q===\'\')){H+=1V(o.q);11=p+o.J.6;b=o.q.6-o.J.6-o.O.6;H=d.K().1h(p,d.K().6).6;H-=1V(d.K().1h(0,p))}$.V(P,{p:p,16:16});2(o.q!==m&&18===l){2A(o.q);1W(11,b)}8{H=-1}14();$.V(P,{1r:\'\',m:m});2(v===7&&A===7){I(L.3r)}I(L.1C);I(k.1C);2(w&&k.1y){1X()}A=F=v=18=l}3 1V(a){2($.X.1U){4 a.6-a.W(/\\n*/g,\'\').6}4 0}3 1s(a){2($.X.2B){4 a.6-a.W(/\\r*/g,\'\').6}4 0}3 2A(a){2(E.m){B b=E.m.1Y();b.2C=a}8{d.K(d.K().1h(0,p)+a+d.K().1h(p+m.6,d.K().6))}}3 1W(a,b){2(u.2D){2($.X.1U&&$.X.3s>=9.5&&b==0){4 l}1i=u.2D();1i.3t(7);1i.2E(\'1Z\',a);1i.3u(\'1Z\',b);1i.3v()}8 2(u.2F){u.2F(a,a+b)}u.1t=16;u.1f()}3 14(){u.1f();16=u.1t;2(E.m){m=E.m.1Y().2C;2($.X.2B){B a=E.m.1Y(),1u=a.3w();1u.3x(u);p=-1;3y(1u.3z(a)){1u.2E(\'1Z\');p++}}8{p=u.2G}}8{p=u.2G;m=d.K().1h(p,u.3A)}4 m}3 1z(){2(!w||w.3B){2(k.1j){w=3C.2H(\'\',\'1z\',k.1j)}8{M=$(\'<2I N="3D"></2I>\');2(k.24==\'25\'){M.1M(1m)}8{M.2f(17)}w=M[M.6-1].3E||3F[M.6-1]}}8 2(F===7){2(M){M.3G()}8{w.2J()}w=M=l}2(!k.1y){1X()}}3 1X(){2K()}3 2K(){B b;2(k.1b!==\'\'){$.2L({2M:\'3H\',2N:k.1b,27:k.26+\'=\'+3I(d.K()),2O:3(a){21(1d(a,1))}})}8{2(!2a){$.2L({2N:k.1k,2O:3(a){21(1d(a,1).W(/<!-- 3J -->/g,d.K()))}})}}4 l}3 21(a){2(w.E){3K{22=w.E.2P.1t}3L(e){22=0}w.E.2H();w.E.3M(a);w.E.2J();w.E.2P.1t=22}2(k.1j){w.1f()}}3 1P(e){A=e.A;F=e.F;v=(!(e.F&&e.v))?e.v:l;2(e.2M===\'2m\'){2(v===7){C=$("a[2p="+3N.3O(e.1v)+"]",17).1w(\'C\');2(C.6!==0){v=l;2v(3(){C.3P(\'1N\')},1);4 l}}2(e.1v===13||e.1v===10){2(v===7){v=l;Y(k.1F);4 k.1F.1x}8 2(A===7){A=l;Y(k.1E);4 k.1E.1x}8{Y(k.1D);4 k.1D.1x}}2(e.1v===9){2(A==7||v==7||F==7){4 l}2(H!==-1){14();H=d.K().6-H;1W(H,0);H=-1;4 l}8{Y(k.1G);4 k.1G.1x}}}}2b()})};$.23.3Q=3(){4 G.1c(3(){B a=$(G).1O().3R(\'2e\');a.1w(\'z\').1w(\'z.T\').1w(\'z\').Q(a)})};$.T=3(a){B b={1p:l};$.V(b,a);2(b.1p){4 $(b.1p).1c(3(){$(G).1f();$(G).2Q(\'1Q\',[b])})}8{$(\'u\').2Q(\'1Q\',[b])}}})(3S);',62,241,'||if|function|return||length|true|else|||||||||||||false|selection||string|caretPosition|block||||textarea|ctrlKey|previewWindow|||div|shiftKey|var|li|id|document|altKey|this|caretOffset|prepare|openWith|val|clicked|iFrame|class|closeWith|hash|replaceWith|lines||markItUp|root|extend|replace|browser|markup|ul||start|nameSpace||get|levels|scrollPosition|header|abort|key|placeHolder|previewParserPath|each|localize|bind|focus|build|substring|range|previewInWindow|previewTemplatePath|resizeHandle|footer|mouseMove|mouseUp|target|title|line|fixIeBug|scrollTop|rangeCopy|keyCode|parent|keepDefault|previewAutoRefresh|preview|html|beforeInsert|afterInsert|onEnter|onShiftEnter|onCtrlEnter|onTab|miuScript|attr|wrap|dropMenus|appendTo|insertAfter|mousedown|unbind|keyPressed|insertion|name|split|value|opera|fixOperaBug|set|refreshPreview|createRange|character||writeInPreview|sp|fn|previewPosition|after|previewParserVar|data|markupSet|null|template|init|substr|addClass|markItUpEditor|insertBefore|height|clientY|css|mousemove|mouseup|append|keydown|focused|hover|accesskey|separator|for|markItUpButton|click|call|setTimeout|hide|dropMenu|magicMarkups|undefined|insert|msie|text|createTextRange|moveStart|setSelectionRange|selectionStart|open|iframe|close|renderPreview|ajax|type|url|success|documentElement|trigger|templates|script|src|match|jquery|markitup|pack|js|toUpperCase|markItUpContainer|markItUpHeader|markItUpFooter|safari|markItUpResizeHandle|Math|max|px|keyup|display|Ctrl|markItUpSeparator|className|href|contextmenu|eval|show|one|push|markItUpDropMenu|pop|toString|prompt|isFunction|beforeMultiInsert|trim|join|afterMultiInsert|version|collapse|moveEnd|select|duplicate|moveToElementText|while|inRange|selectionEnd|closed|window|markItUpPreviewFrame|contentWindow|frame|remove|POST|encodeURIComponent|content|try|catch|write|String|fromCharCode|triggerHandler|markItUpRemove|removeClass|jQuery'.split('|'),0,{}));

/*
 * jQuery Plugin: Tokenizing Autocomplete Text Entry
 * Version 1.1
 *
 * Copyright (c) 2009 James Smith (http://loopj.com)
 * Licensed jointly under the GPL and MIT licenses,
 * choose which one suits your project best!
 *
 */
(function($){$.fn.tokenInput=function(url,options){var settings=$.extend({url:url,hintText:"Type in a search term",noResultsText:"No results",searchingText:"Searching...",searchDelay:200,minChars:1,mustMatch:true,tokenLimit:null,jsonContainer:null,method:"GET",contentType:"json",queryParam:"q",onResult:null},options);settings.classes=$.extend({tokenList:'token-input-list-facebook',token:'token-input-token-facebook',tokenDelete:'token-input-delete-token-facebook',selectedToken:'token-input-selected-token-facebook',highlightedToken:'token-input-highlighted-token-facebook',dropdown:'token-input-dropdown-facebook',dropdownItem:'token-input-dropdown-item-facebook',dropdownItem2:'token-input-dropdown-item2-facebook',selectedDropdownItem:'token-input-selected-dropdown-item-facebook',inputToken:'token-input-input-token-facebook'},options.classes);return this.each(function(){var list=new $.TokenList(this,settings);});};$.TokenList=function(input,settings){var POSITION={BEFORE:0,AFTER:1,END:2};var KEY={BACKSPACE:8,TAB:9,RETURN:13,ESC:27,LEFT:37,UP:38,RIGHT:39,DOWN:40,COMMA:188};var saved_tokens=[];var token_count=0;var cache=new $.TokenList.Cache();var timeout;var input_box=$("<input name=\"thisTokenInput\" type=\"text\">").css({outline:"none"}).focus(function(){if(settings.tokenLimit==null||settings.tokenLimit!=token_count){show_dropdown_hint();}}).blur(function(){hide_dropdown();if(settings.mustMatch){$('li.token-input-input-token-facebook input').val('');}}).keydown(function(event){var previous_token;var next_token;switch(event.keyCode){case KEY.LEFT:case KEY.RIGHT:case KEY.UP:case KEY.DOWN:if(!$(this).val()){previous_token=input_token.prev();next_token=input_token.next();if((previous_token.length&&previous_token.get(0)===selected_token)||(next_token.length&&next_token.get(0)===selected_token)){if(event.keyCode==KEY.LEFT||event.keyCode==KEY.UP){deselect_token($(selected_token),POSITION.BEFORE);}else{deselect_token($(selected_token),POSITION.AFTER);}}else if((event.keyCode==KEY.LEFT||event.keyCode==KEY.UP)&&previous_token.length){select_token($(previous_token.get(0)));}else if((event.keyCode==KEY.RIGHT||event.keyCode==KEY.DOWN)&&next_token.length){select_token($(next_token.get(0)));}}else{var dropdown_item=null;if(event.keyCode==KEY.DOWN||event.keyCode==KEY.RIGHT){dropdown_item=$(selected_dropdown_item).next();}else{dropdown_item=$(selected_dropdown_item).prev();}
if(dropdown_item.length){select_dropdown_item(dropdown_item);}
return false;}
break;case KEY.BACKSPACE:previous_token=input_token.prev();if(!$(this).val().length){if(selected_token){delete_token($(selected_token));}else if(previous_token.length){select_token($(previous_token.get(0)));}
return false;}else if($(this).val().length==1){hide_dropdown();}else{setTimeout(function(){do_search(false);},5);}
break;case KEY.TAB:case KEY.RETURN:case KEY.COMMA:if(selected_dropdown_item){add_token($(selected_dropdown_item));return false;}
break;case KEY.ESC:hide_dropdown();return true;default:if(is_printable_character(event.keyCode)){setTimeout(function(){do_search(false);},5);}
break;}});var hidden_input=$(input).hide().focus(function(){input_box.focus();}).blur(function(){input_box.blur();});var selected_token=null;var selected_dropdown_item=null;var token_list=$("<ul />").addClass(settings.classes.tokenList).insertAfter(hidden_input).click(function(event){var li=get_element_from_event(event,"li");if(li&&li.get(0)!=input_token.get(0)){toggle_select_token(li);return false;}else{input_box.focus();if(selected_token){deselect_token($(selected_token),POSITION.END);}}}).mouseover(function(event){var li=get_element_from_event(event,"li");if(li&&selected_token!==this){li.addClass(settings.classes.highlightedToken);}}).mouseout(function(event){var li=get_element_from_event(event,"li");if(li&&selected_token!==this){li.removeClass(settings.classes.highlightedToken);}}).mousedown(function(event){var li=get_element_from_event(event,"li");if(li){return false;}});var dropdown=$("<div>").addClass(settings.classes.dropdown).insertAfter(token_list).hide();var input_token=$("<li />").addClass(settings.classes.inputToken).appendTo(token_list).append(input_box);init_list();function init_list(){li_data=settings.prePopulate;if(li_data&&li_data.length){for(var i in li_data){var this_token=$("<li><p>"+li_data[i].name+"</p> </li>").addClass(settings.classes.token).insertBefore(input_token);$("<span>x</span>").addClass(settings.classes.tokenDelete).appendTo(this_token).click(function(){delete_token($(this).parent());return false;});$.data(this_token.get(0),"tokeninput",{"id":li_data[i].id,"name":li_data[i].name});input_box.val("").focus();hide_dropdown();var id_string=li_data[i].id+","
hidden_input.val(hidden_input.val()+id_string);}}}
function is_printable_character(keycode){if((keycode>=48&&keycode<=90)||(keycode>=96&&keycode<=111)||(keycode>=186&&keycode<=192)||(keycode>=219&&keycode<=222)){return true;}else{return false;}}
function get_element_from_event(event,element_type){var target=$(event.target);var element=null;if(target.is(element_type)){element=target;}else if(target.parent(element_type).length){element=target.parent(element_type+":first");}
return element;}
function insert_token(id,value){var this_token=$("<li><p>"+value+"</p> </li>").addClass(settings.classes.token).insertBefore(input_token);$("<span>x</span>").addClass(settings.classes.tokenDelete).appendTo(this_token).click(function(){delete_token($(this).parent());return false;});$.data(this_token.get(0),"tokeninput",{"id":id,"name":value});return this_token;}
function add_token(item){var li_data=$.data(item.get(0),"tokeninput");var this_token=insert_token(li_data.id,li_data.name);input_box.val("").focus();hide_dropdown();var id_string=li_data.id+","
hidden_input.val(hidden_input.val()+id_string);token_count++;if(settings.tokenLimit!=null&&settings.tokenLimit>=token_count){input_box.hide();hide_dropdown();}}
function select_token(token){token.addClass(settings.classes.selectedToken);selected_token=token.get(0);input_box.val("");hide_dropdown();}
function deselect_token(token,position){token.removeClass(settings.classes.selectedToken);selected_token=null;if(position==POSITION.BEFORE){input_token.insertBefore(token);}else if(position==POSITION.AFTER){input_token.insertAfter(token);}else{input_token.appendTo(token_list);}
input_box.focus();}
function toggle_select_token(token){if(selected_token==token.get(0)){deselect_token(token,POSITION.END);}else{if(selected_token){deselect_token($(selected_token),POSITION.END);}
select_token(token);}}
function delete_token(token){var token_data=$.data(token.get(0),"tokeninput");token.remove();selected_token=null;input_box.focus();var str=hidden_input.val()
var start=str.indexOf(token_data.id+",");var end=str.indexOf(",",start)+1;if(end>=str.length){hidden_input.val(str.slice(0,start));}else{hidden_input.val(str.slice(0,start)+str.slice(end,str.length));}
token_count--;if(settings.tokenLimit!=null){input_box.show().val("").focus();}}
function hide_dropdown(){dropdown.hide().empty();selected_dropdown_item=null;}
function show_dropdown_searching(){dropdown.html("<p>"+settings.searchingText+"</p>").show();}
function show_dropdown_hint(){dropdown.html("<p>"+settings.hintText+"</p>").show();}
function highlight_term(value,term){return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+term+")(?![^<>]*>)(?![^&;]+;)","gi"),"<b>$1</b>");}
function populate_dropdown(query,results){if(results.length){dropdown.empty();var countResults=results.length;if(countResults>10){var resultsHeightClass='class="overflow"';}else{var resultsHeightClass='';}
var dropdown_ul=$("<ul "+resultsHeightClass+">").appendTo(dropdown).mouseover(function(event){select_dropdown_item(get_element_from_event(event,"li"));}).click(function(event){add_token(get_element_from_event(event,"li"));}).mousedown(function(event){return false;}).hide();for(var i in results){if(results.hasOwnProperty(i)){var this_li=$("<li>"+highlight_term(results[i].name,query)+"</li>").appendTo(dropdown_ul);if(i%2){this_li.addClass(settings.classes.dropdownItem);}else{this_li.addClass(settings.classes.dropdownItem2);}
if(i==0){select_dropdown_item(this_li);}
$.data(this_li.get(0),"tokeninput",{"id":results[i].id,"name":results[i].name});}}
dropdown.show();dropdown_ul.slideDown("fast");}else{dropdown.html("<p>"+settings.noResultsText+"</p>").show();}}
function select_dropdown_item(item){if(item){if(selected_dropdown_item){deselect_dropdown_item($(selected_dropdown_item));}
item.addClass(settings.classes.selectedDropdownItem);selected_dropdown_item=item.get(0);}}
function deselect_dropdown_item(item){item.removeClass(settings.classes.selectedDropdownItem);selected_dropdown_item=null;}
function do_search(immediate){var query=input_box.val().toLowerCase();if(query&&query.length){if(selected_token){deselect_token($(selected_token),POSITION.AFTER);}
if(query.length>=settings.minChars){show_dropdown_searching();if(immediate){run_search(query);}else{clearTimeout(timeout);timeout=setTimeout(function(){run_search(query);},settings.searchDelay);}}else{hide_dropdown();}}}
function run_search(query){var cached_results=cache.get(query);if(cached_results){populate_dropdown(query,cached_results);}else{var queryStringDelimiter=settings.url.indexOf("?")<0?"?":"&";var callback=function(results){if($.isFunction(settings.onResult)){results=settings.onResult.call(this,results);}
cache.add(query,settings.jsonContainer?results[settings.jsonContainer]:results);populate_dropdown(query,settings.jsonContainer?results[settings.jsonContainer]:results);};if(settings.method=="POST"){$.post(settings.url+queryStringDelimiter+settings.queryParam+"="+query,{},callback,settings.contentType);}else{$.get(settings.url+queryStringDelimiter+settings.queryParam+"="+query,{},callback,settings.contentType);}}}};$.TokenList.Cache=function(options){var settings=$.extend({max_size:50},options);var data={};var size=0;var flush=function(){data={};size=0;};this.add=function(query,results){if(size>settings.max_size){flush();}
if(!data[query]){size++;}
data[query]=results;};this.get=function(query){return data[query];};};})(jQuery);


/* http://keith-wood.name/countdown.html
   Countdown for jQuery v1.5.8.
   Written by Keith Wood (kbwood{at}iinet.com.au) January 2008.
   Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and 
   MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. 
   Please attribute the author if you use it. */
(function($){function Countdown(){this.regional=[];this.regional['']={labels:['Years','Months','Weeks','Days','Hours','Minutes','Seconds'],labels1:['Year','Month','Week','Day','Hour','Minute','Second'],compactLabels:['y','m','w','d'],whichLabels:null,timeSeparator:':',isRTL:false};this._defaults={until:null,since:null,timezone:null,serverSync:null,format:'dHMS',layout:'',compact:false,significant:0,description:'',expiryUrl:'',expiryText:'',alwaysExpire:false,onExpiry:null,onTick:null,tickInterval:1};$.extend(this._defaults,this.regional['']);this._serverSyncs=[]}var w='countdown';var Y=0;var O=1;var W=2;var D=3;var H=4;var M=5;var S=6;$.extend(Countdown.prototype,{markerClassName:'hasCountdown',_timer:setInterval(function(){$.countdown._updateTargets()},980),_timerTargets:[],setDefaults:function(a){this._resetExtraLabels(this._defaults,a);extendRemove(this._defaults,a||{})},UTCDate:function(a,b,c,e,f,g,h,i){if(typeof b=='object'&&b.constructor==Date){i=b.getMilliseconds();h=b.getSeconds();g=b.getMinutes();f=b.getHours();e=b.getDate();c=b.getMonth();b=b.getFullYear()}var d=new Date();d.setUTCFullYear(b);d.setUTCDate(1);d.setUTCMonth(c||0);d.setUTCDate(e||1);d.setUTCHours(f||0);d.setUTCMinutes((g||0)-(Math.abs(a)<30?a*60:a));d.setUTCSeconds(h||0);d.setUTCMilliseconds(i||0);return d},periodsToSeconds:function(a){return a[0]*31557600+a[1]*2629800+a[2]*604800+a[3]*86400+a[4]*3600+a[5]*60+a[6]},_settingsCountdown:function(a,b){if(!b){return $.countdown._defaults}var c=$.data(a,w);return(b=='all'?c.options:c.options[b])},_attachCountdown:function(a,b){var c=$(a);if(c.hasClass(this.markerClassName)){return}c.addClass(this.markerClassName);var d={options:$.extend({},b),_periods:[0,0,0,0,0,0,0]};$.data(a,w,d);this._changeCountdown(a)},_addTarget:function(a){if(!this._hasTarget(a)){this._timerTargets.push(a)}},_hasTarget:function(a){return($.inArray(a,this._timerTargets)>-1)},_removeTarget:function(b){this._timerTargets=$.map(this._timerTargets,function(a){return(a==b?null:a)})},_updateTargets:function(){for(var i=this._timerTargets.length-1;i>=0;i--){this._updateCountdown(this._timerTargets[i])}},_updateCountdown:function(a,b){var c=$(a);b=b||$.data(a,w);if(!b){return}c.html(this._generateHTML(b));c[(this._get(b,'isRTL')?'add':'remove')+'Class']('countdown_rtl');var d=this._get(b,'onTick');if(d){var e=b._hold!='lap'?b._periods:this._calculatePeriods(b,b._show,this._get(b,'significant'),new Date());var f=this._get(b,'tickInterval');if(f==1||this.periodsToSeconds(e)%f==0){d.apply(a,[e])}}var g=b._hold!='pause'&&(b._since?b._now.getTime()<b._since.getTime():b._now.getTime()>=b._until.getTime());if(g&&!b._expiring){b._expiring=true;if(this._hasTarget(a)||this._get(b,'alwaysExpire')){this._removeTarget(a);var h=this._get(b,'onExpiry');if(h){h.apply(a,[])}var i=this._get(b,'expiryText');if(i){var j=this._get(b,'layout');b.options.layout=i;this._updateCountdown(a,b);b.options.layout=j}var k=this._get(b,'expiryUrl');if(k){window.location=k}}b._expiring=false}else if(b._hold=='pause'){this._removeTarget(a)}$.data(a,w,b)},_changeCountdown:function(a,b,c){b=b||{};if(typeof b=='string'){var d=b;b={};b[d]=c}var e=$.data(a,w);if(e){this._resetExtraLabels(e.options,b);extendRemove(e.options,b);this._adjustSettings(a,e);$.data(a,w,e);var f=new Date();if((e._since&&e._since<f)||(e._until&&e._until>f)){this._addTarget(a)}this._updateCountdown(a,e)}},_resetExtraLabels:function(a,b){var c=false;for(var n in b){if(n!='whichLabels'&&n.match(/[Ll]abels/)){c=true;break}}if(c){for(var n in a){if(n.match(/[Ll]abels[0-9]/)){a[n]=null}}}},_adjustSettings:function(a,b){var c;var d=this._get(b,'serverSync');var e=0;var f=null;for(var i=0;i<this._serverSyncs.length;i++){if(this._serverSyncs[i][0]==d){f=this._serverSyncs[i][1];break}}if(f!=null){e=(d?f:0);c=new Date()}else{var g=(d?d.apply(a,[]):null);c=new Date();e=(g?c.getTime()-g.getTime():0);this._serverSyncs.push([d,e])}var h=this._get(b,'timezone');h=(h==null?-c.getTimezoneOffset():h);b._since=this._get(b,'since');if(b._since!=null){b._since=this.UTCDate(h,this._determineTime(b._since,null));if(b._since&&e){b._since.setMilliseconds(b._since.getMilliseconds()+e)}}b._until=this.UTCDate(h,this._determineTime(this._get(b,'until'),c));if(e){b._until.setMilliseconds(b._until.getMilliseconds()+e)}b._show=this._determineShow(b)},_destroyCountdown:function(a){var b=$(a);if(!b.hasClass(this.markerClassName)){return}this._removeTarget(a);b.removeClass(this.markerClassName).empty();$.removeData(a,w)},_pauseCountdown:function(a){this._hold(a,'pause')},_lapCountdown:function(a){this._hold(a,'lap')},_resumeCountdown:function(a){this._hold(a,null)},_hold:function(a,b){var c=$.data(a,w);if(c){if(c._hold=='pause'&&!b){c._periods=c._savePeriods;var d=(c._since?'-':'+');c[c._since?'_since':'_until']=this._determineTime(d+c._periods[0]+'y'+d+c._periods[1]+'o'+d+c._periods[2]+'w'+d+c._periods[3]+'d'+d+c._periods[4]+'h'+d+c._periods[5]+'m'+d+c._periods[6]+'s');this._addTarget(a)}c._hold=b;c._savePeriods=(b=='pause'?c._periods:null);$.data(a,w,c);this._updateCountdown(a,c)}},_getTimesCountdown:function(a){var b=$.data(a,w);return(!b?null:(!b._hold?b._periods:this._calculatePeriods(b,b._show,this._get(b,'significant'),new Date())))},_get:function(a,b){return(a.options[b]!=null?a.options[b]:$.countdown._defaults[b])},_determineTime:function(k,l){var m=function(a){var b=new Date();b.setTime(b.getTime()+a*1000);return b};var n=function(a){a=a.toLowerCase();var b=new Date();var c=b.getFullYear();var d=b.getMonth();var e=b.getDate();var f=b.getHours();var g=b.getMinutes();var h=b.getSeconds();var i=/([+-]?[0-9]+)\s*(s|m|h|d|w|o|y)?/g;var j=i.exec(a);while(j){switch(j[2]||'s'){case's':h+=parseInt(j[1],10);break;case'm':g+=parseInt(j[1],10);break;case'h':f+=parseInt(j[1],10);break;case'd':e+=parseInt(j[1],10);break;case'w':e+=parseInt(j[1],10)*7;break;case'o':d+=parseInt(j[1],10);e=Math.min(e,$.countdown._getDaysInMonth(c,d));break;case'y':c+=parseInt(j[1],10);e=Math.min(e,$.countdown._getDaysInMonth(c,d));break}j=i.exec(a)}return new Date(c,d,e,f,g,h,0)};var o=(k==null?l:(typeof k=='string'?n(k):(typeof k=='number'?m(k):k)));if(o)o.setMilliseconds(0);return o},_getDaysInMonth:function(a,b){return 32-new Date(a,b,32).getDate()},_normalLabels:function(a){return a},_generateHTML:function(c){var d=this._get(c,'significant');c._periods=(c._hold?c._periods:this._calculatePeriods(c,c._show,d,new Date()));var e=false;var f=0;var g=d;var h=$.extend({},c._show);for(var i=Y;i<=S;i++){e|=(c._show[i]=='?'&&c._periods[i]>0);h[i]=(c._show[i]=='?'&&!e?null:c._show[i]);f+=(h[i]?1:0);g-=(c._periods[i]>0?1:0)}var j=[false,false,false,false,false,false,false];for(var i=S;i>=Y;i--){if(c._show[i]){if(c._periods[i]){j[i]=true}else{j[i]=g>0;g--}}}var k=this._get(c,'compact');var l=this._get(c,'layout');var m=(k?this._get(c,'compactLabels'):this._get(c,'labels'));var n=this._get(c,'whichLabels')||this._normalLabels;var o=this._get(c,'timeSeparator');var p=this._get(c,'description')||'';var q=function(a){var b=$.countdown._get(c,'compactLabels'+n(c._periods[a]));return(h[a]?c._periods[a]+(b?b[a]:m[a])+' ':'')};var r=function(a){var b=$.countdown._get(c,'labels'+n(c._periods[a]));return((!d&&h[a])||(d&&j[a])?'<span class="countdown_section"><span class="countdown_amount">'+c._periods[a]+'</span><br/>'+(b?b[a]:m[a])+'</span>':'')};return(l?this._buildLayout(c,h,l,k,d,j):((k?'<span class="countdown_row countdown_amount'+(c._hold?' countdown_holding':'')+'">'+q(Y)+q(O)+q(W)+q(D)+(h[H]?this._minDigits(c._periods[H],2):'')+(h[M]?(h[H]?o:'')+this._minDigits(c._periods[M],2):'')+(h[S]?(h[H]||h[M]?o:'')+this._minDigits(c._periods[S],2):''):'<span class="countdown_row countdown_show'+(d||f)+(c._hold?' countdown_holding':'')+'">'+r(Y)+r(O)+r(W)+r(D)+r(H)+r(M)+r(S))+'</span>'+(p?'<span class="countdown_row countdown_descr">'+p+'</span>':'')))},_buildLayout:function(c,d,e,f,g,h){var j=this._get(c,(f?'compactLabels':'labels'));var k=this._get(c,'whichLabels')||this._normalLabels;var l=function(a){return($.countdown._get(c,(f?'compactLabels':'labels')+k(c._periods[a]))||j)[a]};var m=function(a,b){return Math.floor(a/b)%10};var o={desc:this._get(c,'description'),sep:this._get(c,'timeSeparator'),yl:l(Y),yn:c._periods[Y],ynn:this._minDigits(c._periods[Y],2),ynnn:this._minDigits(c._periods[Y],3),y1:m(c._periods[Y],1),y10:m(c._periods[Y],10),y100:m(c._periods[Y],100),y1000:m(c._periods[Y],1000),ol:l(O),on:c._periods[O],onn:this._minDigits(c._periods[O],2),onnn:this._minDigits(c._periods[O],3),o1:m(c._periods[O],1),o10:m(c._periods[O],10),o100:m(c._periods[O],100),o1000:m(c._periods[O],1000),wl:l(W),wn:c._periods[W],wnn:this._minDigits(c._periods[W],2),wnnn:this._minDigits(c._periods[W],3),w1:m(c._periods[W],1),w10:m(c._periods[W],10),w100:m(c._periods[W],100),w1000:m(c._periods[W],1000),dl:l(D),dn:c._periods[D],dnn:this._minDigits(c._periods[D],2),dnnn:this._minDigits(c._periods[D],3),d1:m(c._periods[D],1),d10:m(c._periods[D],10),d100:m(c._periods[D],100),d1000:m(c._periods[D],1000),hl:l(H),hn:c._periods[H],hnn:this._minDigits(c._periods[H],2),hnnn:this._minDigits(c._periods[H],3),h1:m(c._periods[H],1),h10:m(c._periods[H],10),h100:m(c._periods[H],100),h1000:m(c._periods[H],1000),ml:l(M),mn:c._periods[M],mnn:this._minDigits(c._periods[M],2),mnnn:this._minDigits(c._periods[M],3),m1:m(c._periods[M],1),m10:m(c._periods[M],10),m100:m(c._periods[M],100),m1000:m(c._periods[M],1000),sl:l(S),sn:c._periods[S],snn:this._minDigits(c._periods[S],2),snnn:this._minDigits(c._periods[S],3),s1:m(c._periods[S],1),s10:m(c._periods[S],10),s100:m(c._periods[S],100),s1000:m(c._periods[S],1000)};var p=e;for(var i=Y;i<=S;i++){var q='yowdhms'.charAt(i);var r=new RegExp('\\{'+q+'<\\}(.*)\\{'+q+'>\\}','g');p=p.replace(r,((!g&&d[i])||(g&&h[i])?'$1':''))}$.each(o,function(n,v){var a=new RegExp('\\{'+n+'\\}','g');p=p.replace(a,v)});return p},_minDigits:function(a,b){a=''+a;if(a.length>=b){return a}a='0000000000'+a;return a.substr(a.length-b)},_determineShow:function(a){var b=this._get(a,'format');var c=[];c[Y]=(b.match('y')?'?':(b.match('Y')?'!':null));c[O]=(b.match('o')?'?':(b.match('O')?'!':null));c[W]=(b.match('w')?'?':(b.match('W')?'!':null));c[D]=(b.match('d')?'?':(b.match('D')?'!':null));c[H]=(b.match('h')?'?':(b.match('H')?'!':null));c[M]=(b.match('m')?'?':(b.match('M')?'!':null));c[S]=(b.match('s')?'?':(b.match('S')?'!':null));return c},_calculatePeriods:function(c,d,e,f){c._now=f;c._now.setMilliseconds(0);var g=new Date(c._now.getTime());if(c._since){if(f.getTime()<c._since.getTime()){c._now=f=g}else{f=c._since}}else{g.setTime(c._until.getTime());if(f.getTime()>c._until.getTime()){c._now=f=g}}var h=[0,0,0,0,0,0,0];if(d[Y]||d[O]){var i=$.countdown._getDaysInMonth(f.getFullYear(),f.getMonth());var j=$.countdown._getDaysInMonth(g.getFullYear(),g.getMonth());var k=(g.getDate()==f.getDate()||(g.getDate()>=Math.min(i,j)&&f.getDate()>=Math.min(i,j)));var l=function(a){return(a.getHours()*60+a.getMinutes())*60+a.getSeconds()};var m=Math.max(0,(g.getFullYear()-f.getFullYear())*12+g.getMonth()-f.getMonth()+((g.getDate()<f.getDate()&&!k)||(k&&l(g)<l(f))?-1:0));h[Y]=(d[Y]?Math.floor(m/12):0);h[O]=(d[O]?m-h[Y]*12:0);f=new Date(f.getTime());var n=(f.getDate()==i);var o=$.countdown._getDaysInMonth(f.getFullYear()+h[Y],f.getMonth()+h[O]);if(f.getDate()>o){f.setDate(o)}f.setFullYear(f.getFullYear()+h[Y]);f.setMonth(f.getMonth()+h[O]);if(n){f.setDate(o)}}var p=Math.floor((g.getTime()-f.getTime())/1000);var q=function(a,b){h[a]=(d[a]?Math.floor(p/b):0);p-=h[a]*b};q(W,604800);q(D,86400);q(H,3600);q(M,60);q(S,1);if(p>0&&!c._since){var r=[1,12,4.3482,7,24,60,60];var s=S;var t=1;for(var u=S;u>=Y;u--){if(d[u]){if(h[s]>=t){h[s]=0;p=1}if(p>0){h[u]++;p=0;s=u;t=1}}t*=r[u]}}if(e){for(var u=Y;u<=S;u++){if(e&&h[u]){e--}else if(!e){h[u]=0}}}return h}});function extendRemove(a,b){$.extend(a,b);for(var c in b){if(b[c]==null){a[c]=null}}return a}$.fn.countdown=function(a){var b=Array.prototype.slice.call(arguments,1);if(a=='getTimes'||a=='settings'){return $.countdown['_'+a+'Countdown'].apply($.countdown,[this[0]].concat(b))}return this.each(function(){if(typeof a=='string'){$.countdown['_'+a+'Countdown'].apply($.countdown,[this].concat(b))}else{$.countdown._attachCountdown(this,a)}})};$.countdown=new Countdown()})(jQuery);


/* Copyright (c) 2009 Brandon Aaron (http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
 * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
 *
 * Version: 3.0.2
 * 
 * Requires: 1.2.2+
 */
(function(c){var a=["DOMMouseScroll","mousewheel"];c.event.special.mousewheel={setup:function(){if(this.addEventListener){for(var d=a.length;d;){this.addEventListener(a[--d],b,false)}}else{this.onmousewheel=b}},teardown:function(){if(this.removeEventListener){for(var d=a.length;d;){this.removeEventListener(a[--d],b,false)}}else{this.onmousewheel=null}}};c.fn.extend({mousewheel:function(d){return d?this.bind("mousewheel",d):this.trigger("mousewheel")},unmousewheel:function(d){return this.unbind("mousewheel",d)}});function b(f){var d=[].slice.call(arguments,1),g=0,e=true;f=c.event.fix(f||window.event);f.type="mousewheel";if(f.wheelDelta){g=f.wheelDelta/120}if(f.detail){g=-f.detail/3}d.unshift(f,g);return c.event.handle.apply(this,d)}})(jQuery);

/* =========================================================

// jquery.innerfade.js

// Datum: 2008-02-14
// Firma: Medienfreunde Hofmann & Baldes GbR
// Author: Torsten Baldes
// Mail: t.baldes@medienfreunde.com
// Web: http://medienfreunde.com

// based on the work of Matt Oakes http://portfolio.gizone.co.uk/applications/slideshow/
// and Ralf S. Engelschall http://trainofthoughts.org/

 *
 *  <ul id="news"> 
 *      <li>content 1</li>
 *      <li>content 2</li>
 *      <li>content 3</li>
 *  </ul>
 *  
 *  $('#news').innerfade({ 
 *	  animationtype: Type of animation 'fade' or 'slide' (Default: 'fade'), 
 *	  speed: Fading-/Sliding-Speed in milliseconds or keywords (slow, normal or fast) (Default: 'normal'), 
 *	  timeout: Time between the fades in milliseconds (Default: '2000'), 
 *	  type: Type of slideshow: 'sequence', 'random' or 'random_start' (Default: 'sequence'), 
 * 		containerheight: Height of the containing element in any css-height-value (Default: 'auto'),
 *	  runningclass: CSS-Class which the container get’s applied (Default: 'innerfade'),
 *	  children: optional children selector (Default: null)
 *  }); 
 *

// ========================================================= */
(function($) {

    $.fn.innerfade = function(options) {
        return this.each(function() {   
            $.innerfade(this, options);
        });
    };

    $.innerfade = function(container, options) {
        var settings = {
        	'animationtype':    'fade',
            'speed':            'normal',
            'type':             'sequence',
            'timeout':          2000,
            'containerheight':  'auto',
            'runningclass':     'innerfade',
            'children':         null
        };
        if (options)
            $.extend(settings, options);
        if (settings.children === null)
            var elements = $(container).children();
        else
            var elements = $(container).children(settings.children);
        if (elements.length > 1) {
            $(container).css('position', 'relative').css('height', settings.containerheight).addClass(settings.runningclass);
            for (var i = 0; i < elements.length; i++) {
                $(elements[i]).css('z-index', String(elements.length-i)).css('position', 'absolute').hide();
            };
            if (settings.type == "sequence") {
                setTimeout(function() {
                    $.innerfade.next(elements, settings, 1, 0);
                }, settings.timeout);
                $(elements[0]).show();
            } else if (settings.type == "random") {
            		var last = Math.floor ( Math.random () * ( elements.length ) );
                setTimeout(function() {
                    do { 
												current = Math.floor ( Math.random ( ) * ( elements.length ) );
										} while (last == current );             
										$.innerfade.next(elements, settings, current, last);
                }, settings.timeout);
                $(elements[last]).show();
						} else if ( settings.type == 'random_start' ) {
								settings.type = 'sequence';
								var current = Math.floor ( Math.random () * ( elements.length ) );
								setTimeout(function(){
									$.innerfade.next(elements, settings, (current + 1) %  elements.length, current);
								}, settings.timeout);
								$(elements[current]).show();
						}	else {
							alert('Innerfade-Type must either be \'sequence\', \'random\' or \'random_start\'');
						}
				}
    };

    $.innerfade.next = function(elements, settings, current, last) {
        if (settings.animationtype == 'slide') {
            $(elements[last]).slideUp(settings.speed);
            $(elements[current]).slideDown(settings.speed);
        } else if (settings.animationtype == 'fade') {
            $(elements[last]).fadeOut(settings.speed);
            $(elements[current]).fadeIn(settings.speed, function() {
							removeFilter($(this)[0]);
						});
        } else
            alert('Innerfade-animationtype must either be \'slide\' or \'fade\'');
        if (settings.type == "sequence") {
            if ((current + 1) < elements.length) {
                current = current + 1;
                last = current - 1;
            } else {
                current = 0;
                last = elements.length - 1;
            }
        } else if (settings.type == "random") {
            last = current;
            while (current == last)
                current = Math.floor(Math.random() * elements.length);
        } else
            alert('Innerfade-Type must either be \'sequence\', \'random\' or \'random_start\'');
        setTimeout((function() {
            $.innerfade.next(elements, settings, current, last);
        }), settings.timeout);
    };

})(jQuery);

// **** remove Opacity-Filter in ie ****
function removeFilter(element) {
	if(element.style.removeAttribute){
		element.style.removeAttribute('filter');
	}
}


/* FORM FEEDBACK */
function doFocus(obj) {
	$(obj).addClass("active").parents("label").addClass("active").find(".infopop").animate({opacity:1,left:392},400);
}

function doBlur(obj) {
	if (validate(obj)) {
		isGood(obj);
	}
}

function reportErr(obj, message) {
	$(obj).addClass("error").parents("label").removeClass("isgood").addClass("required").addClass("error").find(".infopop").html(message).addClass("errorpop").animate({opacity:1,left:392},400);
}

function isGood(obj) {
	$(obj).removeClass("error").removeClass("active").parents("label").addClass("isgood").removeClass("error").removeClass("active").find(".infopop").removeClass("errorpop").animate({opacity:0,left:413},400);
} 	

function validate(obj) {
	// Extend het jQuery object om Regular expression masks op te nemen die aan eigenschappen zijn toegekend
	mask = jQuery.extend({textfieldmask: /^[a-z\.\s-]{2,}$/i,usernamemask: /^[a-z0-9]{3,}$/i,streetnrmask: /^([0-9\s\-]+)([a-z0-9])*/i,phonemask: /^[0-9\(\)\+\.\s-]{10,}$/i,passwordmask: /^\w{5,}$/, emailmask:/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/,companymask: /^[a-z0-9\.\s-]{2,}$/i,zipmask: /^([0-9]{4,4}?)+([a-z]){2,2}?$/i})
	// Extend het jQuery object om foutmeldingen toe te voegen die aan eigenschappen zijn toegekend
	errmsg = jQuery.extend({textfielderr:"At least two characters",usernameerr:"A-z 0-9 only more than 2 char.",phoneerr: "Vergeet het kengetal niet",passworderr:"At least 5 characters",emailerr:"Invalid e-mail address",matcherr: "Must match",companyerr: "Minimaal 2 letters of cijfers",ziperr: "4 cijfers gevolgd door 2 letters",streetnrerr: "Minimaal 1 cijfer"});

	// Stel variabelen in die de details bevatten van welk masker we gaan gebruiken en of dit veld overeen moet komen met een ander veld
	var masktouse = null;
	var mustmatch = null;
	// Bepaal tegen welk mask-type we gaan valideren
	switch(obj.name) {
		case "fname": 		masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
		case "lname": 		masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
		case "phone": 		masktouse="phonemask"; 			errtouse="phoneerr"; 		break;
		case "username": 	masktouse="usernamemask"; 		errtouse="usernameerr"; 	break;
		case "email": 		masktouse="emailmask"; 			errtouse="emailerr"; 		break;
		case "phone": 		masktouse="phonemask"; 			errtouse="phoneerr"; 		break;
		case "city": 		masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
		case "zip": 		masktouse="zipmask"; 			errtouse="ziperr"; 			break;
		case "street": 		masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
		case "streetnr": 	masktouse="streetnrmask"; 		errtouse="streetnrerr"; 	break;
		case "cityShip": 	masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
		case "zipShip": 	masktouse="zipmask"; 			errtouse="ziperr"; 			break;
		case "streetShip": 	masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
		case "streetnrShip": masktouse="streetnrmask"; 		errtouse="streetnrerr"; 	break;
		case "company": 	masktouse="companymask"; 		errtouse="companyerr"; 		break;
		case "password": 	masktouse="passwordmask"; 		errtouse="passworderr"; 	mustmatch="verpassword"; 	break;
		case "verpassword": masktouse="passwordmask"; 		errtouse="passworderr"; 	mustmatch="password"; 		break;
	}
	// Controleer of het element een verplicht veld is, voordat we er tegen gaan valideren
	if($(obj).parents("label").hasClass("required") && masktouse) {
		// Stel een snelle manier in om het object dat we valideren te bereiken
		pointer = $(obj);
		// Test de waarde van het veld tegen de Regular Expression 
		if (mask[masktouse].test(pointer.val())) {
			// Het veld is succesvol gevalideerd!
			
			// Kijk of het veld overeen moet komen met een ander veld binnen het formulier
			if (mustmatch) {
				// Het moet overeenkomen, dus pak het object waarmee het overeen moet komen 
				matchobj = $("#"+mustmatch);
				if (matchobj.val()!='' && matchobj.val()!=pointer.val()) {
					// De velden komen niet overeen, dus laat een foutmelding voor beide zien
					reportErr(obj,errmsg["matcherr"]);	
					reportErr(matchobj,errmsg["matcherr"]);
				}
				else {
					// Of de velden komen overeen, of het veld is nog niet afgerond
					// Als het andere veld afgerond is roep je de isGood-functie om de foutmeldingen te verwijderen
					if (matchobj.val()!='') { isGood(matchobj);}
					return true;
				}
			}
			else {
				// Er hoeft niets gechecked te worden, dus return true - validatie gelukt!
				return true;
			} 
		}
		else { 
			// De validatie van dit veld met een Regular Expression mislukt
			reportErr(obj,errmsg[errtouse]);
			return false; 
		}
	} 
	else {	
		// Dit is geen verplicht veld, dus hoeven we dit nergens tegen te valideren			
		return true;
	}
}

// BB SETTINGS
myBbcodeSettings = {
nameSpace:          "bbcode", // Useful to prevent multi-instances CSS conflict
previewParserPath:  "/cms/preview.php",
markupSet: [
	{name:'Bold', key:'B', openWith:'[b]', closeWith:'[/b]'}, 
	{name:'Italic', key:'I', openWith:'[i]', closeWith:'[/i]'}, 
	{name:'Underline', key:'U', openWith:'[u]', closeWith:'[/u]'}, 
	{separator:'---------------' },
	{name:'Picture', key:'P', replaceWith:'[img][![Url]!][/img]'}, 
	{name:'Link', key:'L', openWith:'[url=[![Url]!]]', closeWith:'[/url]', placeHolder:'Your text to link here...'},
	{name:'Youtube', replaceWith:'[youtube][![Url]!][/youtube]'},
	{separator:'---------------' },
	{	name:'Colors', className:'palette', dropMenu: [
		
		{name:'Dark Red', 		openWith:'[color=darkred]', 	closeWith:'[/color]', className:"col1-1" },
		{name:'Crimson',		openWith:'[color=crimson]', 	closeWith:'[/color]', className:"col1-2" },
		{name:'Red', 			openWith:'[color=red]', 		closeWith:'[/color]', className:"col1-3" },
		{name:'Orange',			openWith:'[color=orange]', 		closeWith:'[/color]', className:"col1-4" },
		{name:'Orange Red',		openWith:'[color=orangered]', 	closeWith:'[/color]', className:"col1-5" },
		{name:'Brown', 			openWith:'[color=brown]',		closeWith:'[/color]', className:"col1-6" },
		
		{name:'Hot Pink', 		openWith:'[color=hotpink]', 	closeWith:'[/color]', className:"col2-1" },
		{name:'Deep Pink',		openWith:'[color=deeppink]', 	closeWith:'[/color]', className:"col2-2" },
		{name:'Gold', 			openWith:'[color=gold]', 		closeWith:'[/color]', className:"col2-3" },
		{name:'Golden Rod',		openWith:'[color=goldenrod]', 	closeWith:'[/color]', className:"col2-4" },
		{name:'Yellow Green',	openWith:'[color=yellowgreen]', closeWith:'[/color]', className:"col2-5" },
		{name:'Lime Green', 	openWith:'[color=limegreen]',	closeWith:'[/color]', className:"col2-6" },
		
		{name:'Green', 			openWith:'[color=green]', 		closeWith:'[/color]', className:"col3-1" },
		{name:'Dark Green',		openWith:'[color=darkgreen]', 	closeWith:'[/color]', className:"col3-2" },
		{name:'Olive', 			openWith:'[color=olive]', 		closeWith:'[/color]', className:"col3-3" },
		{name:'Dark Cyan',		openWith:'[color=darkcyan]', 	closeWith:'[/color]', className:"col3-4" },
		{name:'Royal Blue',		openWith:'[color=royalblue]', 	closeWith:'[/color]', className:"col3-5" },
		{name:'Cornflower Blue', openWith:'[color=cornflowerblue]',	closeWith:'[/color]', className:"col3-6" },
		
		{name:'Dodger Blue', 	openWith:'[color=dodgerblue]', 	closeWith:'[/color]', className:"col4-1" },
		{name:'Blue',			openWith:'[color=blue]', 		closeWith:'[/color]', className:"col4-2" },
		{name:'Dark Blue', 		openWith:'[color=darkblue]', 	closeWith:'[/color]', className:"col4-3" },
		{name:'Navy', 			openWith:'[color=navy]', 		closeWith:'[/color]', className:"col4-4" },
		{name:'Indigo',			openWith:'[color=indigo]', 		closeWith:'[/color]', className:"col4-5" },
		{name:'Violet',			openWith:'[color=violet]', 		closeWith:'[/color]', className:"col4-6" },
		
		{name:'Dark Magenta', 	openWith:'[color=darkmagenta]',	closeWith:'[/color]', className:"col4-1" },
		{name:'Dim Gray', 		openWith:'[color=dimgray]', 	closeWith:'[/color]', className:"col5-2" },
		{name:'Slate Gray',		openWith:'[color=slategray]', 	closeWith:'[/color]', className:"col5-3" },
		{name:'Dark Slate Gray', openWith:'[color=darkslategray]', 	closeWith:'[/color]', className:"col5-4" },
		{name:'Gainsboro',		openWith:'[color=gainsboro]', 	closeWith:'[/color]', className:"col5-5" },
		{name:'White', 			openWith:'[color=white]',		closeWith:'[/color]', className:"col5-6" }
	]},
	{name:'Size', key:'S', openWith:'[size=[![Text size]!]]', closeWith:'[/size]', dropMenu :[
		{name:'Big', openWith:'[size=20]', closeWith:'[/size]' },
		{name:'Normal', openWith:'[size=13]', closeWith:'[/size]' },
		{name:'Small', openWith:'[size=10]', closeWith:'[/size]' }
	]},
	{separator:'---------------' },
	{name:'Bulleted list', openWith:'[list]\n[*] First\n[*] Second etc...\n', closeWith:'\n[/list]'}, 
	{name:'Numeric list', openWith:'[list=[![Starting number]!]]\n[*] First\n[*] Second etc...\n', closeWith:'\n[/list]'}, 
	{name:'Quotes', openWith:'[quote]', closeWith:'[/quote]'}, 
	{separator:'---------------' },
	{name:'Save', className:'save', beforeInsert:function(markItUp) { miu.save(markItUp) } },
	{name:'Load', className:'load', beforeInsert:function(markItUp) { miu.load(markItUp) } }
]
}
// {name:'Preview', className:"preview", call:'preview' },
// {name:'List item', openWith:'[*] '}, 

// mIu nameSpace to avoid conflict.
miu = {
	save: function(markItUp) {
	    data = encodeURIComponent(markItUp.textarea.value); // Thx Gregory LeRoy
	    ok = confirm("Save the content?");
	    if (!ok) { return false; }
	    $.post("/ajax/cms.php", "data="+data+"&type=60131", function(response) {
	            if(response === "MIU:OK") {
	                alert("Saved!");
	            }
	        }
	    ); 
	},
	
	load: function(markItUp) {
	    $.post("/ajax/cms.php", "data="+data+"&type=50184", function(response) {
	            if(response === "MIU:EMPTY") {
	                alert("Nothing to load");
	            } else {
	                ok = confirm("Load the previously saved content?");
	                if (!ok) { return false; }
	                markItUp.textarea.value = response;
	                alert("Loaded!");
	            }
	        }
	    );
	}      
}
