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.cookies){
	
	
	cookieName = settings.cookiePrefix + settings.activeTabInputName;
	if(settings.activeTab==null) settings.activeTab = $.cookies.get(cookieName);
	else $.cookies.set(cookieName,settings.activeTab,newOptions);
}

$('.'+settings.tabAreaClasses).hide();

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

var tabExist = $('.'+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.click(function(){

		$('.'+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)!=null && $('input#'+settings.activeTabInputName)!=''  && settings.activeTabInputName!=null) $('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)
}