var cookieName;
var newOptions = {hoursToLive: 3};
jQuery.fn.xpTabs = function(options) {
 settings = jQuery.extend({ 
 	tabAreaClasses : 'tab-area',
 	tabSelectedClasses : 'selected', 
 	activeTab : null,
 	cookies : false,
 	cookiePrefix : '',
 	activeTabInputName : 'xpActiveTab',
 	ajaxPlaceholderSelector : '#ajax-place-holder',
 	useAjax : false,
 	loadWithIDs : false,
 	callback : null,
 	selectFirst : true,
 	displayMethod: 'show'
 	}, options);


var tabIsSelected = true;

var currentSelector = this.selector;

if(settings.cookiePrefix.length>0) settings.cookies = true;

var anHref = new String(window.location);
var queryString = anHref.replace(/^[^\?]+\??/,'');
var params = parseURL( queryString );
  
if(params[settings.activeTabInputName] && params[settings.activeTabInputName]!=null) {
	settings.activeTab = params[settings.activeTabInputName];
	
}
	
if (settings.activeTab == null) {
	var index = anHref.indexOf('#');
	if (index > 0) {
		var strings = anHref.split('#');
		settings.activeTab = strings[strings.length - 1];
	}
}
if(settings.cookies){
	
	try {
		cookieName = settings.cookiePrefix + settings.activeTabInputName;
		if (settings.activeTab == null) 
			settings.activeTab = $.cookies.get(cookieName);
		else 
			$.cookies.set(cookieName, settings.activeTab, newOptions);
	}
	
	catch(ex){
		
	}
}
if(settings.tabAreaClasses!=null && settings.tabAreaClasses.length>0)
	$('.'+settings.tabAreaClasses).hide();

if(settings.activeTab == null && settings.activeTabInputName!=null){
	if($('input#'+settings.activeTabInputName).length>0)
 		settings.activeTab = $('input#'+settings.activeTabInputName).val();
	else if($('input.'+settings.activeTabInputName).length>0)
 		settings.activeTab = $('input.'+settings.activeTabInputName).val();
}


var tabExist = settings.activeTab!=null && settings.activeTab.length>0 && $('.'+settings.activeTab).length>0;

if((settings.activeTab == null || !tabExist) && settings.selectFirst){
	var firstItemSelector = this.selector+':first';
	var firstItem = $(firstItemSelector);
	settings.activeTab = firstItem.attr('id');
	if (settings.activeTab == '' || settings.activeTab == null || settings.activeTab == undefined) {
    	settings.activeTab = firstItem.attr('rel');
    }
}

if(settings.activeTab && settings.activeTab!=''){
	$('.'+settings.activeTab).show();
	$(this.selector+'#'+settings.activeTab).addClass(settings.tabSelectedClasses);
	$(this.selector+"[rel='"+settings.activeTab+"']").addClass(settings.tabSelectedClasses);	
} 

if(settings.callback!=null) settings.callback();

this.bind('click',function(e){
	e.preventDefault();
	if (!e.isPropagationStopped()/* && !e.isImmediatePropagationStopped()*/) {
	
		$('.' + settings.tabAreaClasses).hide();
		
		$(currentSelector + '.' + settings.tabSelectedClasses).removeClass(settings.tabSelectedClasses);
		
		var href = $(this).attr('href');
		if (settings.useAjax && href != null && href != '' && href != '#') {
			if ($(settings.ajaxPlaceholderSelector)) {
				//$('#ajax-place-holder to-destroy').remove();
				
				$.ajax({
					url: href,
					success: function(data, textStatus){
						$(settings.ajaxPlaceholderSelector).html(data);
					},
					error: function(XMLHttpRequest, textStatus, errorThrown){
						window.status = textStatus;
					}
				});
			}
		}
		else {
		
			var tab = $(this).attr('id');
			
			if (tab == '' || tab == null || tab == undefined) {
				tab = $(this).attr('rel');
			}
			
			if (settings.loadWithIDs) 
				displayElement('#' + tab);
			else 
				displayElement('.' + tab);
			
			
		}
		$(this).addClass(settings.tabSelectedClasses);
		
		if ($('input#' + settings.activeTabInputName).length > 0) 
			$('input#' + settings.activeTabInputName).val(tab);
		else 
			if ($('input.' + settings.activeTabInputName).length > 0) 
				$('input.' + settings.activeTabInputName).val(tab);
		if (settings.cookies) 
			$.cookies.set(cookieName, tab, newOptions);
		
		if (settings.callback != null) 
			settings.callback();
		return false;
	}
});


function displayElement(selector){
	//alert('$("'+selector+'").'+settings.displayMethod+'();');
	eval('$("'+selector+'").'+settings.displayMethod+'();');
}
  // do the rest of the plugin, using url and settings






}



function parseURL ( query ) {
	var Params = {};
	if ( ! query ) {return Params;}// return empty object
	var Pairs = query.split(/[;&]/);
	for ( var i = 0; i < Pairs.length; i++ ) {
	var KeyVal = Pairs[i].split('=');
	if ( ! KeyVal || KeyVal.length != 2 ) {continue;}
		var key = unescape( KeyVal[0] );
		var val = unescape( KeyVal[1] );
		val = val.replace(/\+/g, ' ');
		Params[key] = val;
	}
	return Params;
}



function loadjscssfile(filename, filetype){
 if (filetype=="js"){ //if filename is a external JavaScript file
  var fileref=document.createElement('script')
  fileref.setAttribute("type","text/javascript")
  fileref.setAttribute("src", filename)
 }
 else if (filetype=="css"){ //if filename is an external CSS file
  var fileref=document.createElement("link")
  fileref.setAttribute("rel", "stylesheet")
  fileref.setAttribute("type", "text/css")
  fileref.setAttribute("href", filename)
 }
 if (typeof fileref!="undefined")
  document.getElementsByTagName("head")[0].appendChild(fileref)
}