/**
 * JS_NETLASH.utils
 * @author Bram Van Damme <bramus@netlash.com>
 */



/**
 * JS_NETLASH Object
 * -------------------------------------------------------------
 */

	if (!JS_NETLASH) { var JS_NETLASH = new Object(); }
	
	
	
 



/**
 * JS_NETLASH - Utils object
 * -------------------------------------------------------------
 */

	if (!JS_NETLASH.utils) { JS_NETLASH.utils = new Object(); }







/**
 * JS_NETLASH - Utils object - core
 * -------------------------------------------------------------
 */

	JS_NETLASH.utils.core = {
		
		
		/**
		 * Datamembers
		 * -------------------------------------------------------------
		 */
		 
		 	version							: '20080618',

		/**
		 * parseObjectInDropdown
		 * @param Object dropdown
		 * @param Object object
		 * @return void
		 * -------------------------------------------------------------
		 */

			parseObjectInDropdown	: function(dropdown, object, selectedElement) {

				// clear dropdown
				dropdown.empty();

				// selectedIndex
				var counter			= 0;	// counter
				var selectedIndex 	= 0;	// selectedIndex of the element

				// parse in elements
				for(element in object){
					// shit fix : revoke functions
					if (object[element].constructor !== Function) {
						dropdown.append('<option value="' + element + '"' + ((element == selectedElement)?' selected="selected"':'') + '>' + object[element] + '</option>');
						selectedIndex = (element == selectedElement)?counter:selectedIndex;
						counter++;
					}
				};

				// set selectedIndex
				dropdown.get(0).selectedIndex = selectedIndex;

			},

		/**
		 * toggleFieldBasedUponCheckbox
		 * @param Object checkbox
		 * @param Object field
		 * @return void
		 * -------------------------------------------------------------
		 */

			// DEPRECATED! - Handled by the seoHandler ;)
			toggleFieldBasedUponCheckbox	: function(checkbox, field) {
				if (checkbox.is(':checked')) {

					// enable field
					field.attr('disabled', '');
					field.removeClass('input-disabled');

					// store default value
					field.get(0).defaultValue = field.val();

					// focus it
					field.focus();

				} else {

					// disable field
					field.attr('disabled', 'disabled');
					field.addClass('input-disabled');

					// restore default value
					field.val(field.get(0).defaultValue);
				}
			},

		/**
		 * setCheckboxValue - sets the checkbox checked/unchecked based upon the value and (de)activate the field if needed.
		 * @param Object checkbox
		 * @param Object field
		 * @param enum value
		 * @return void
		 * -------------------------------------------------------------
		 */


			setCheckboxValue				: function(checkbox, field, value) {
				if (value == 'Y') {
					checkbox.attr('checked','checked');
					field.attr('disabled', '');
					field.removeClass('input-disabled');
					field.get(0).defaultValue = field.val();	// store default value too!
				} else {
					checkbox.attr('checked','');
					field.attr('disabled', 'disabled');
					field.addClass('input-disabled');
				}
			},

		/**
		 * setCheckboxSingle - sets the checkbox checked/unchecked based upon the value
		 * @param Object checkbox
		 * @param enum value
		 * @return void
		 * -------------------------------------------------------------
		 */


			setCheckboxSingle				: function(checkbox, value) {
				if (value == 'Y') {
					checkbox.attr('checked','checked');
				} else {
					checkbox.attr('checked','');
				}
			},


		/**
		 * setRadioButtonYesNo - sets the checkbox checked/unchecked based upon the value
		 * @param string partialId
		 * @param enum value
		 * @return void
		 * -------------------------------------------------------------
		 */

			setRadioButtonYesNo				: function(partialId, value) {

				// unset all
				$('#' + partialId + value).attr('checked','');
				$('#' + partialId + ((value == 'N')?'Y':'N')).attr('checked','');

				// set correct
				$('#' + partialId + value).attr('checked','checked');
			},


		/**
		 * showElementYesNo - shows/hides an elelemtn
		 * @param string partialId
		 * @param enum value
		 * @return void
		 * -------------------------------------------------------------
		 */

			showElementYesNo				: function(partialId, value) {

				// unset all
				$('#' + partialId + value).hide();
				$('#' + partialId + ((value == 'N')?'Y':'N')).hide();

				// set correct
				$('#' + partialId + value).show();
			},


		/**
		 * showSingleElementYesNo - shows/hides an elelemtn
		 * @param Object elem
		 * @param enum value
		 * @return void
		 * -------------------------------------------------------------
		 */

			showSingleElementYesNo			: function(elem, value) {

				if (value == 'N') {
					elem.hide();
				} else {
					elem.show();
				}
			},


		/**
		 * end of object
		 * -------------------------------------------------------------
		 */
			_eoo				: true


	}






/**
 * JS_NETLASH - Utils object - string
 * -------------------------------------------------------------
 */

	JS_NETLASH.utils.string = {
		
		
		/**
		 * Datamembers
		 * -------------------------------------------------------------
		 */
		 
		 	version							: '20080625',


		/**
		 * trim - trims a string
		 * @param string str
		 * @return string
		 * -------------------------------------------------------------
		 */

			trim 							: function(str) {

				if (!str || (str == undefined) || (str == ''))	return '';
				return str.replace(/^\s+|\s+$/g,"");
			},


		/**
		 * ltrim - lefttrims a string
		 * @param string str
		 * @return string
		 * -------------------------------------------------------------
		 */

			ltrim 							: function(str) {

				if (!str || (str == undefined) || (str == ''))	return '';
				return str.replace(/^\s+/,"");
			},


		/**
		 * rtrim - righttrims a string
		 * @param string str
		 * @return string
		 * -------------------------------------------------------------
		 */

			rtrim 							: function(str) {

				if (!str || (str == undefined) || (str == ''))	return '';
				return str.replace(/\s+$/,"");
			},


		/**
		 * replaceAll - replace all occurences of one instring into a string
		 * @param string str
		 * @param string needle
		 * @param string replacement
		 * @return string
		 * -------------------------------------------------------------
		 */

			replaceAll						: function(str, needle, replacement) {

				if (!str || (str == undefined) || (str == ''))	return '';
				return str.replace(new RegExp(needle, 'g'), replacement);
			},


		/**
		 * assignFromObject - kind a like "$tpl->assignFromArray($associativeArray)" ;)
		 * @param string str
		 * @param Object object
		 * @return string
		 * -------------------------------------------------------------
		 */

			assignFromObject				: function(str, object) {

				if (!str || (str == undefined) || (str == ''))	return '';

				for (index in object) {

					str = JS_NETLASH.utils.string.replaceAll(str, '{' + index + '}', object[index]);

				}

				return str;

			},


		/**
		 * html_entity_decode (cfr. PHP)
		 * @author http://kevin.vanzonneveld.net/code/php_equivalents/php.js
		 * @param string str
		 * @return string
		 * -------------------------------------------------------------
		 */

			html_entity_decode				: function (str) {

				if (!str || (str == undefined) || (str == ''))	return '';

				var ta 			= document.createElement("textarea");
				ta.innerHTML	= str.replace(/</g,"<").replace(/>/g,">");
				toReturn 		= ta.value;
				ta 				= null;
				return toReturn;
			},


		/**
		 * htmlentities (cfr. PHP)
		 * @author by Micox - elmicoxcodes.blogspot.com - www.ievolutionweb.com // expanded by Bramus! to allow spaces, dashes and periods ;)
		 * @param string str
		 * @return string
		 * -------------------------------------------------------------
		 */
			
			htmlentities					: function (str) {

				if (!str || (str == undefined) || (str == ''))	return '';
				
				var i,carac,letra,novo='';
				for(i=0;i < str.length;i++){
					if (!str[i])	return '';
					carac = str[i].charCodeAt(0);
					if( (carac > 47 && carac < 58) || (carac > 62 && carac < 127) || (carac == 32) || (carac == 45) || (carac == 46) ){
						//se for numero ou letra normal
						novo += str[i];
					}else{
						novo += "&#" + carac + ";";
					}
				}
				return novo;

				
			},


		/**
		 * ucfirst (cfr. PHP)
		 * @param string str
		 * @return string
		 * -------------------------------------------------------------
		 */
			
			ucfirst						: function(str) {
				if (!str || (str == undefined) || (str == ''))	return '';
				return str.charAt(0).toUpperCase() + str.substr(1, str.length-1);
			},


		/**
		 * urlise (cfr. SpoonFilter)
		 * @param string str
		 * @return string
		 * @todo	backdrop from SpoonFilter!
		 * -------------------------------------------------------------
		 */
			
			urlise						: function(str) {
				
				// no value given? Return empty string!
				if (!str || (str == undefined) || (str == ''))	return '';
				
				// redefine value
				str = JS_NETLASH.utils.string.htmlentities(str);
						
				// allowed characters
				var aCharacters 	= ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '_', ' '];
		
				// letter "a"
				var aSearchA 		= ['&Agrave;', '&#192;', '&Aacute;', '&#193;', '&Acirc;', '&#194;', '&Atilde;', '&#195;', '&Auml;', '&#196;', '&Aring;', '&#197;', '&agrave;', '&#224;', '&aacute;', '&#225;', '&acirc;', '&#226;', '&atilde;', '&#227;', '&auml;', '&#228;', '&aring;', '&#229;'];
				var aReplaceA 		= 'a';
		
				// letter "c"
				var aSearchC		= ['&Ccedil;', '&#199;', '&ccedil;', '&#231;'];
				var aReplaceC 		= 'c';
		
				// letter "e"
				var aSearchE 		= ['&Egrave;', '&#200;', '&Eacute;', '&#201;', '&Ecirc;', '&#202;', '&Euml;', '&#203;', '&egrave;', '&#232;', '&eacute;', '&#233;', '&ecirc;', '&#234;', '&euml;', '&#235;'];
				var aReplaceE 		= 'e';
		
				// letter "i"
				var aSearchI 		= ['&Igrave;', '&#204;', '&Iacute;', '&#205;', '&Icirc;', '&#206;', '&Iuml;', '&#207;', '&igrave;', '&#236;', '&iacute;', '&#237;', '&icirc;', '&#238;', '&iuml;', '&#239;'];
				var aReplaceI 		= 'i';
		
				// letter "l"
				var aSearchL 		= ['&lgrave;', '&#204;', '&lacute;', '&#205;', '&lcirc;', '&#206;', '&luml;', '&#207;'];
				var aReplaceL 		= 'l';
		
				// letter "n"
				var aSearchN 		= ['&Ntilde;', '&#209;', '&ntilde;', '&#241;'];
				var aReplaceN 		= 'n';
		
				// letter "o"
				var aSearchO 		= ['&Ograve;', '&#210;', '&Oacute;', '&#211;', '&Ocirc;', '&#212;', '&Otilde;', '&#213;', '&Ouml;', '&#214;', '&ograve;', '&#242;', '&oacute;', '&#243;', '&ocirc;', '&#244;', '&otilde;', '&#245;', '&ouml;', '&#246;'];
				var aReplaceO 		= 'o';
		
				// letter "u"
				var aSearchU 		= ['&micro;', '&#181;', '&Ugrave;', '&#217;', '&Uacute;', '&#218;', '&Ucirc;', '&#219;', '&Uuml;', '&#220;', '&ugrave;', '&#249;', '&uacute;', '&#250;', '&ucirc;', '&#251;', '&uuml;', '&#252;', '&mu;', '&#956;'];
				var aReplaceU 		= 'u';
		
				// letter "y"
				var aSearchY 		= ['&Yacute;', '&#221;', '&yacute;', '&#253;', '&yuml;', '&#255;', '&Yuml;', '&#376;'];
				var aReplaceY 		= 'y';
		
				// specials
				var aSearchMisc 	= ['&trade;', '&euro;', '&copy', '@'];
				var aReplaceMisc 	= [' tm ', ' euro ', ' copyright ', ' at '];
				
				// now bundle all replacements
				var replacements	= [
					[aSearchA, aReplaceA],
					[aSearchC, aReplaceC],
					[aSearchE, aReplaceE],
					[aSearchI, aReplaceI],
					[aSearchL, aReplaceL],
					[aSearchN, aReplaceN],
					[aSearchO, aReplaceO],
					[aSearchU, aReplaceU],
					[aSearchY, aReplaceY],
					[aSearchMisc, aReplaceMisc]
				];
						
				// replace them replacements fo 'real!
				for (snp in replacements) {
				
					var aSearch 	= replacements[snp][0];
					var sReplace 	= replacements[snp][1];
					
					for (srch in aSearch) {
						str	= JS_NETLASH.utils.string.replaceAll(str, aSearch[srch], sReplace);	
					}
				
				}
				
				// replace html entities
				str = str.replace(/&[a-z0-9\#]{2,8};/ig, '');
						
				// enforce lowercase
				str = str.toLowerCase();
		
				// replace dots with spaces
				str = JS_NETLASH.utils.string.replaceAll(str, '\\.', ' ');
		
				// remove spaces at the beginning and end
				str = JS_NETLASH.utils.string.trim(str);
		
				// default endvalue
				var toReturn = '';
		
				// loop charachtesr
				for (var i = 0; i < str.length; i++)
				{
					// valid character (so add to new string)
					if (jQuery.inArray(str.substr(i, 1), aCharacters) > -1)	toReturn += str.substr(i, 1);
				}
		
				// replace spaces by dashes
				toReturn = JS_NETLASH.utils.string.replaceAll(toReturn, ' ', '-');
		
				// there IS a value
				if(toReturn.length != 0)
				{
					// convert "--" to "-"
					toReturn = toReturn.replace(/\-+/ig,'-');
				}
		
				// trim leading and trailing - signs
				toReturn = toReturn.replace(/^\-+/,"").replace(/\-+$/,"");
		
				// return it!
				return toReturn;
			},


		/**
		 * end of object
		 * -------------------------------------------------------------
		 */
			_eoo				: true

	}






/**
 * JS_NETLASH - Utils object - form
 * -------------------------------------------------------------
 */

	// 2DO - Extend shizzle from filter.php

	JS_NETLASH.utils.form = {
		
		
		/**
		 * Datamembers
		 * -------------------------------------------------------------
		 */
		 
		 	version							: '20080618',

		/**
		 * isFilled
		 * @param Object input
		 * @return bool valid
		 * -------------------------------------------------------------
		 */

			isFilled				: function(input) {
				return (JS_NETLASH.utils.string.trim(input.val()) != '');
			},

		/**
		 * isNumber
		 * @param Object input
		 * @return bool valid
		 * -------------------------------------------------------------
		 */

			isNumber				: function(input) {
				return (!isNaN(input.val()) && input.val() != '');
			},

		/**
		 * isEmail
		 * @param Object input
		 * @return bool valid
		 * -------------------------------------------------------------
		 */

			isEmail					: function(input) {
				var regexp = /^[a-z0-9_\.-]+@([a-z0-9]+([\-]+[a-z0-9]+)*\.)+[a-z]{2,7}$/i;
				return regexp.test(input.val());
			},


		/**
		 * isUrl
		 * @param Object input
		 * @return bool valid
		 * -------------------------------------------------------------
		 */

			isUrl					: function(input) {
				var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/i;
				return regexp.test(input.val());
			},

		/**
		 * isDate
		 * @param Object input
		 * @return bool valid
		 * -------------------------------------------------------------
		 */

			isDate				: function(input) {
				return true; // need to find a good one with multiple dat formatting
			},

		/**
		 * isColor
		 * @param Object input
		 * @return bool valid
		 * -------------------------------------------------------------
		 */

			isColor				: function(input) {
				var regexp = /^\#?[0-9A-F]{6}$/i;
				return regexp.test(input.val().toUpperCase());
			},

		/**
		 * isChecked
		 * @param Object input
		 * @return bool valid
		 * -------------------------------------------------------------
		 */

			isChecked				: function(input) {
				// return if any other checkboxes with that same name are checked
				return ($("input[name='" + input.attr('name') + "']:checked").length >= 1);
			},

		/**
		 * isSelected
		 * @param Object select
		 * @return bool valid
		 * -------------------------------------------------------------
		 */

			isSelected				: function(select) {
				return (select.get(0).selectedIndex !== 0);
			},


		/**
		 * end of object
		 * -------------------------------------------------------------
		 */
			_eoo				: true


	}





/**
 * JS_NETLASH - Utils object - messageHandler
 * -------------------------------------------------------------
 */

	JS_NETLASH.utils.messageHandler = {
		
		
		/**
		 * Datamembers
		 * -------------------------------------------------------------
		 */
		 
		 	version							: '20080618',
			

		/**
		 * Show the message
		 * -------------------------------------------------------------
		 */

			show			: function(message, reportClass) {
				if (message == '') return;
				$('#pages-message').html(message).removeAttr('class').addClass(reportClass).show();
			},
			

		/**
		 * Hide the message
		 * -------------------------------------------------------------
		 */

			hide			: function() {
				$('#pages-message').hide();
			},
			

		/**
		 * end of object
		 * -------------------------------------------------------------
		 */
			_eoo				: true

	}




/**
 * JS_NETLASH - Utils object - hMessageHandler (Human Message Handler - inspired upon HUMANIZED MESSAGES 1.0)
 * -------------------------------------------------------------
 */

	JS_NETLASH.utils.hMessageHandler = {
		
		
		/**
		 * Datamembers
		 * -------------------------------------------------------------
		 */
		 
		 	version							: '20080625',
			

		/**
		 * Datamembers
		 * -------------------------------------------------------------
		 */

			opacity			: 1,
			timetokeep		: 700,
			msgId			: 'pages-hmessage',
			msgClass		: 'default',


		/**
		 * Init
		 * -------------------------------------------------------------
		 */

			init			: function() {
				$('body').append('<div id="' + JS_NETLASH.utils.hMessageHandler.msgId + '"><div class="' + JS_NETLASH.utils.hMessageHandler.msgClass +'"></div></div>');
			},


		/**
		 * Show the message
		 * -------------------------------------------------------------
		 */

			show			: function(message, reportClass) {

				// no message set
				if (message == '') return;

				// show it
				$('#' + JS_NETLASH.utils.hMessageHandler.msgId).find('div').html(message).removeAttr('class').addClass(reportClass || JS_NETLASH.utils.hMessageHandler.msgClass).end().show().animate({ opacity: JS_NETLASH.utils.hMessageHandler.opacity }, 200);

				// bind the events after 700ms
				setTimeout(function() {
					$($.browser.msie?document:window)
						.mousemove(JS_NETLASH.utils.hMessageHandler.hide)
						.click(JS_NETLASH.utils.hMessageHandler.hide)
						.keypress(JS_NETLASH.utils.hMessageHandler.hide)
				}, JS_NETLASH.utils.hMessageHandler.timetokeep);

			},

		/**
		 * Hide the message
		 * -------------------------------------------------------------
		 */

			hide			: function() {

				// unbind event listeners
				$($.browser.msie?document:window)
					.unbind('mousemove', JS_NETLASH.utils.hMessageHandler.hide)
					.unbind('click', JS_NETLASH.utils.hMessageHandler.hide)
					.unbind('keypress', JS_NETLASH.utils.hMessageHandler.hide)

				// fade out and finally hide it
				$('#' + JS_NETLASH.utils.hMessageHandler.msgId).animate({ opacity: 0 }, 200, function() { $('#' + JS_NETLASH.utils.hMessageHandler.msgId).hide() });
			},

		/**
		 * end of object
		 * -------------------------------------------------------------
		 */
			_eoo				: true

	}


/**
 * JS_NETLASH - Utils object - tabsHandler
 * -------------------------------------------------------------
 */

	JS_NETLASH.utils.tabsHandler = {
		
		
		/**
		 * Datamembers
		 * -------------------------------------------------------------
		 */
		 
		 	version							: '20080618',
			

		/**
		 * Datamembers
		 * -------------------------------------------------------------
		 */

			tabs			: null,
			cssSelector		: null,
			

		/**
		 * init
		 * @param string cssSelector
		 * @return void
		 * -------------------------------------------------------------
		 */

			init			: function(cssSelector) {

				// store cssSelector
					JS_NETLASH.utils.tabsHandler.cssSelector = cssSelector;

				// get all tabs
					JS_NETLASH.utils.tabsHandler.tabs = $(JS_NETLASH.utils.tabsHandler.cssSelector);

				// no tabs found
					if (JS_NETLASH.utils.tabsHandler.tabs.length == 0) { return; }

				// show first section
					JS_NETLASH.utils.tabsHandler.switchTab($(cssSelector + ':first'));

				// add events
					JS_NETLASH.utils.tabsHandler.hookEvents();
			},
			

		/**
		 * switchTab - show a tab
		 * @param Object jQueryObject
		 * @return void
		 * -------------------------------------------------------------
		 */

			switchTab		: function(jQueryObject) {
				
				// no tabz!
				if ((JS_NETLASH.utils.tabsHandler.tabs == null) || (JS_NETLASH.utils.tabsHandler.tabs.length == 0)) { return; }

				// hide all tabs
				JS_NETLASH.utils.tabsHandler.tabs.each(function(i) {

					$(this).removeClass('fork-tabs-selected');
					$(this).addClass('fork-tabs-unselect');

					if ($.browser.msie || $.browser.opera) {
						hash = $(this).find('a').attr('href').substr(location.href.length);
						hash = (hash == '')?$(this).find('a').attr('href'):hash;
					} else {
						hash = $(this).find('a').attr('href');
					}

					$(hash).hide();

				});

				// show specified tab
				jQueryObject.removeClass('fork-tabs-unselect');
				jQueryObject.addClass('fork-tabs-selected');

				if ($.browser.msie || $.browser.opera) {
					hash = jQueryObject.find('a').attr('href').substr(location.href.length);
					hash = (hash == '')?jQueryObject.find('a').attr('href'):hash;
				} else {
					hash = jQueryObject.find('a').attr('href');
				}

				$(hash).show();

				jQueryObject.get(0).blur();

				// fixLayout for Pages!
				if (JS_NETLASH.pages.splitHandler)	JS_NETLASH.pages.splitHandler.fixHeight();

			},
			

		/**
		 * switchTabById - show a tab by its id
		 * @param String tabId
		 * @return void
		 * -------------------------------------------------------------
		 */


			switchTabById	: function(tabId) {

				// find the tab
				jQueryObject 	= $(JS_NETLASH.utils.tabsHandler.cssSelector).find('a[href="' +  tabId + '"]').parent();

				// activate the tab
				if (jQueryObject.size() == 1) {
					JS_NETLASH.utils.tabsHandler.switchTab(jQueryObject);
				}


			},
			

		/**
		 * hookEvents - hook the events
		 * @param Object jQueryObject
		 * @return void
		 * -------------------------------------------------------------
		 */

			hookEvents		: function() {

				// hide all sections
				JS_NETLASH.utils.tabsHandler.tabs.each(function(i) {
					$(this).click(function(event) {
						event.preventDefault();
						JS_NETLASH.utils.tabsHandler.switchTab($(this));
					});
				});

			},
			

		/**
		 * hideTabButton - hides a tab button
		 * @param string tabId
		 * @return void
		 * -------------------------------------------------------------
		 */

			hideTabButton		: function(tabId) {

				// hide tab button
				if ($.browser.msie) { // IE, you wanker!

					$('.fork-tabs a').each(function(i) {
						if ($(this).attr('href').indexOf('#' + tabId) > 0) {
							$(this).hide();
						}
					});

				} else {
					$("a[href$='#" + tabId + "']").parent().hide();
				}

			},
			

		/**
		 * showTabButton - shows a tab button
		 * @param string tabId
		 * @return void
		 * -------------------------------------------------------------
		 */

			showTabButton		: function(tabId) {

				// show tab button
				if ($.browser.msie) { // IE, you wanker!

					$('.fork-tabs a').each(function(i) {
						if ($(this).attr('href').indexOf('#' + tabId) > 0) {
							$(this).show();
						}
					});

				} else {
					$("a[href$='#" + tabId + "']").parent().show();
				}

			},
			

		/**
		 * appendTabButton - inserts a tab button at the end of an ul
		 * @param string tabTitle
		 * @param string tabToLinkTo
		 * @param Object ulToAppendTo
		 * @param boolean selected
		 * @return void
		 *
		 * @example JS_NETLASH.utils.tabsHandler.appendTabButton("Achteraan", "fork-tab-security", $('.fork-tabs-advanced'), false);
		 * -------------------------------------------------------------
		 */

			appendTabButton		: function(tabTitle, tabToLinkTo, ulToAppendTo, selected) {

				// append
				ulToAppendTo.append('<li class="' + ((selected == true)?'fork-tabs-selected':'fork-tabs-unselect') + '"><a href="#' + tabToLinkTo + '">' + tabTitle + '</a></li>');

				// hook click
				$("a[href='#" + tabToLinkTo + "']").parent().click(function(event) {
					event.preventDefault();
					JS_NETLASH.utils.tabsHandler.switchTab($(this));
				});

				// re-get all tabs
				JS_NETLASH.utils.tabsHandler.tabs = $(JS_NETLASH.utils.tabsHandler.cssSelector);
			},
			

		/**
		 * prependTabButton - inserts a tab button at the beginning of an ul
		 * @param string tabTitle
		 * @param Object ulToAppendTo
		 * @param boolean selected
		 * @return void
		 *
		 * @example JS_NETLASH.utils.tabsHandler.prependTabButton("Vooraan", "fork-tab-security", $('.fork-tabs-basic'), true);
		 * -------------------------------------------------------------
		 */

			prependTabButton		: function(tabTitle, tabToLinkTo, ulToAppendTo, selected) {

				// prepend
				ulToAppendTo.prepend('<li class="' + ((selected == true)?'fork-tabs-selected':'fork-tabs-unselect') + '"><a href="#' + tabToLinkTo + '">' + tabTitle + '</a></li>');

				// hook click
				$("a[href='#" + tabToLinkTo + "']").parent().click(function(event) {
					event.preventDefault();
					JS_NETLASH.utils.tabsHandler.switchTab($(this));
				});

				// re-get all tabs
				JS_NETLASH.utils.tabsHandler.tabs = $(JS_NETLASH.utils.tabsHandler.cssSelector);

			},
			

		/**
		 * end of object
		 * -------------------------------------------------------------
		 */
		 
			_eoo				: true

	}





/**
 * Main Run : Init objects when document is loaded
 * @author Bram Van Damme <bramus@netlash.com>
 */
 	jQuery(function(){
		JS_NETLASH.utils.hMessageHandler.init();			
	});
