AjaxSearch = new Object();

$(document).ready(function() {
	
	
	AjaxSearch.Post = $.evalJSON($('#SearchPost').html());
	
	// ********************************************************************************* //
	
	$('#search_toolbar .search_box input').click(AjaxSearch.AddValue);
	$('#search_toolbar .ResHolder a').live('click', AjaxSearch.RemoveResHolderItem);
	$('.SubmitFavorite').live('click', AjaxSearch.SubmitFavorite);	
	$('.SubmitCart').live('click', AjaxSearch.SubmitCart);	
	$('.SubmitComment').live('click', AjaxSearch.SubmitComment);	
	$('.DeleteComment').live('click', AjaxSearch.DeleteComment);	

	
	$('.OpenFavComments').click(AjaxSearch.OpenFavComments);
	
	AjaxSearch.ActivateTablesorter();
	AjaxSearch.ActivateFancybox();
	


	
	// ********************************************************************************* //
	
});

AjaxSearch.AddValue = function(event){
	
	// Empty Value?
	if ($(event.target).prevAll('select').val() == false)
	{
		return false;
	}
	
	if ( $(event.target).attr('rel') != 'limit') {
		var cat_id = $(event.target).prevAll('select').val();
		var cat_name = $(event.target).prevAll('select').find('option:selected').html();
		
		// Duplicate?
		if (array_search(cat_id, AjaxSearch['Post']['search'][ $(event.target).attr('rel') + '[]']) !== false){
			alert('You have already applied this filter. If you are trying to remove this filter please click on the filter name in the results line.');
			return false;
		}
		
		// Add to array
		AjaxSearch['Post']['search'][ $(event.target).attr('rel') + '[]'].push(cat_id);
	}
	
	// Show the loading spinner
	$(event.target).siblings('.LoadingSpinner').show();
	
	
	$(event.target).closest('.search_box').find('.ResHolder').append('<a href="#" rel="'+cat_id+'">'+cat_name+'</a>');
	
	jQuery.post('http://' + window.location.host + '/music/ajax/', AjaxSearch.Post.search,
	function(rData){			
		$('#results tbody').empty().html(rData);
		$(event.target).siblings('.LoadingSpinner').hide();
		AjaxSearch.ActivateTablesorter('trigger');		
		AjaxSearch.ActivateFancybox();			
	}, 'html');
	
	return false;
};

// ********************************************************************************* //

AjaxSearch.RemoveResHolderItem = function(event){
	var SearchBox = $(event.target).closest('.search_box');
	var Type = SearchBox.find('input.add').attr('rel');
	var Key = array_search($(event.target).attr('rel'), AjaxSearch['Post']['search'][ Type + '[]']);

	if (Key == 0){
		AjaxSearch['Post']['search'][ Type + '[]'].splice(Key, Key + 1);
	} 
	else {
	
		AjaxSearch['Post']['search'][ Type + '[]'].splice(Key, Key);
	}
	
	$(event.target).remove();
	
	SearchBox.find('.LoadingSpinner').show();
	
	jQuery.post('http://' + window.location.host + '/music/ajax/', AjaxSearch.Post.search,
		function(rData){			
			$('#results tbody').empty().html(rData);
			SearchBox.find('.LoadingSpinner').hide();
			AjaxSearch.ActivateFancybox();
			$('.PlayAudio').click(AjaxSearch.PlayAudio);
			AjaxSearch.ActivateTablesorter('trigger');
			AjaxSearch.ActivateFancybox();
	}, 'html');
	
	
	
	return false;
};

// ********************************************************************************* //

AjaxSearch.SubmitFavorite = function(event){
	
	var Target = jQuery(event.target);
	
	if ( Target.attr('data') == 'LOGGED_OUT') {
		alert('You must be logged in before you can add favorites.');
		return false;
	}
	
	Target.addClass('LoadingIcon');		
	
	var FavStatus = '';
	if ( Target.hasClass('AddFavorite') ) FavStatus = 'NEW';
	if ( Target.hasClass('DelFavorite') ) FavStatus = 'OLD';
	
	if (FavStatus == 'OLD' && confirm("Are you sure you wish to remove this from your Favorites?") != true) {
		$(event.target).removeClass('LoadingIcon');
		return false;
	}
	
	jQuery.get('http://' + window.location.host + '/music/favorite/' + Target.attr('rel'), {},
	function(rData){			
		Target.removeClass('LoadingIcon');

		if ( FavStatus == 'NEW' ){
			Target.attr( 'rel', trim(Target.attr('rel')) + '/delete/' );
			Target.removeClass('AddFavorite').addClass('DelFavorite');
			AjaxSearch.UpdateFavCount();
		}
		
		if ( FavStatus == 'OLD' ){
			Target.attr('rel', Target.attr('rel').substr(0, 4) );
			Target.removeClass('DelFavorite').addClass('AddFavorite');
			AjaxSearch.UpdateFavCount();
		}
		
		alert(rData);
		
		if ( FavStatus == 'OLD' ){
			jQuery( '#FAV_' + Target.attr('rel') ).hide('slow');
		}
	}, 'text');
	
	return false;
};

// ********************************************************************************* //

AjaxSearch.SubmitCart = function(event){

	if ( $(event.target).attr('data') == 'LOGGED_OUT') {
		alert('You must be logged in before you can add to cart.');
		return false;
	}
	
	$(event.target).addClass('LoadingIcon');
	
	var TargetRel = trim($(event.target).attr('rel'));
	
	var FavStatus = '';
	if ( $(event.target).hasClass('AddCart') ) FavStatus = 'NEW';
	if ( $(event.target).hasClass('DelCart') ) FavStatus = 'OLD';
	
	if (FavStatus == 'OLD' && confirm("Are you sure you wish to remove this from your Cart?") != true) {
		$(event.target).removeClass('LoadingIcon');
		return false;
	}
	
	if ($.cookie('exp_cart_tracks') == null || $.cookie('exp_cart_tracks') == false)
	{
		var Cookie = new Array();
	}
	else {
		var Cookie = $.cookie('exp_cart_tracks').split('|');
	}
	
	setTimeout( function(){
	
		$(event.target).removeClass('LoadingIcon');
		
		if ( FavStatus == 'NEW' ){
			Cookie.push(TargetRel);
			Cookie = array_unique(Cookie, true);
			$(event.target).attr( 'rel', TargetRel + '/delete/' );
			$(event.target).removeClass('AddCart').addClass('DelCart');
			alert('The selected track has been successfully added to the cart.');
		}
		
		if ( FavStatus == 'OLD' ){			
			var Key = array_search(rtrim( TargetRel, '/delete/'), Cookie);
			if (Key == 0){
				Cookie.splice(Key, Key + 1);
			} 
			else {
			
				Cookie.splice(Key, Key);
			}				
			$(event.target).attr( 'rel', rtrim( TargetRel, '/delete/') );
			$(event.target).removeClass('DelCart').addClass('AddCart');
			alert('The selected track has been removed from the cart.');
		}
		
		$('#UserCart .CartAmount').html( Cookie.length );
		
		setTimeout( function(){
		 $.cookie('exp_cart_tracks', Cookie.join('|'), { expires: 7, path: '/', domain: 'www.musiconmackavenue.com'});
		}, 500);
		
		if ( $(event.target).hasClass('CartPage') ) 
		{
			window.location.reload();
		}

	}, 1000);
	
	
	return false;
};

// ********************************************************************************* //

AjaxSearch.OpenTrack = function(event){
	var Rel = $(event.target).attr('rel');
	
	$.fancybox.showActivity();
/*
	$('a.OpenTrack').fancybox({
		'type' : 'inline',
		'content' : 'TEST',
		'hideOnContentClick': false,
		'callbackOnShow' : AjaxSearch.OpenTrack,
		'frameWidth' : 800,
		'frameHeight' : 600,
		'padding' : 0
	});
	*/
	

	$.ajax({
		type: 'GET',
		dataType : 'html',
		url: 'http://' + window.location.host + '/music/ajax_track_detail/' + Rel,
		success: function(rData){
			$.fancybox(rData);
		},
		error: function(xhr, type, exception) { alert("Error: " + type); }
	});

	return false;
};

// ********************************************************************************* //

AjaxSearch.ActivateTablesorter = function(trigger){
	if (trigger == 'trigger'){
		$('table.tablesorter').triggerHandler('update'); 
	    $("table.tablesorter").tablesorter( {widgets: ['zebra'],sortList: [[0,0]]} );
        $('table.tablesorter').trigger('update');
        $('table.tablesorter').tablesorter( {widgets: ['zebra'],sortList: [[0,0]]} ); 
	
		$("#results tr").hover(
			function() {
				$(this).addClass("hover");
			},
			function() {
				$(this).removeClass("hover");
		});
	
		return false;
	};
	
	$('table.tablesorter').tablesorter({
		widgets: ['zebra'],
		sortList: [[0,0]]
	});
	
	$("#results tr").hover(
			function() {
				$(this).addClass("hover");
			},
			function() {
				$(this).removeClass("hover");
	});
	
};

// ********************************************************************************* //

AjaxSearch.SubmitComment = function(event){
	$('.sl_form .LoadingSpinner').css('display', 'inline');
	
	$(event.target).closest('form').ajaxSubmit({
		type: 'post', dataType: 'text', iframe:false,
		success: function(retData){			
			$(event.target).closest('form').find('.success').show();
			$('.sl_form .LoadingSpinner').css('display', 'none');
	}});
	
	return false;
};

// ********************************************************************************* //

AjaxSearch.DeleteComment = function(event){
	
	$.post('http://' + window.location.host + '/music/comment_delete/' + $(event.target).attr('rel'));
	
	alert('Comment Deleted');
	$(event.target).closest('.comment').hide('slow');
	

	return false;
};

// ********************************************************************************* //

AjaxSearch.ActivateFancybox = function(){

	$('a.OpenTrack').click(AjaxSearch.OpenTrack);

};

// ********************************************************************************* //

AjaxSearch.OpenFavComments = function(){
	
	// Does the parent TR has the odd class?
	ParentTDClass = '';
	if (jQuery(this).closest('tr').hasClass('odd')) ParentTDClass = 'odd';
	
	if ( jQuery(this).hasClass('Triggered') != false ) {
		jQuery(this).parent().parent().next().remove();
		jQuery(this).removeClass('Triggered');
	}
	else {
		var Contents = jQuery(this).siblings('.FavoritesComments').html();
		jQuery(this).siblings('.FavoritesComments').parent().parent().after(' <tr><td colspan="5" class="FavoComments"> </td></tr> ').next().addClass(ParentTDClass).find('td').append(Contents);
		AjaxSearch.ActivateFancybox();	
		jQuery(this).addClass('Triggered');
	}
	
	

	return false;
};

// ********************************************************************************* //

AjaxSearch.UpdateFavCount = function(){
	
	$.post('http://' + window.location.host + '/music/ajax_favorites_added/', function(retData){
		jQuery('#UserFav').html(retData);
	});

};

// ********************************************************************************* //

function array_search(needle, haystack, argStrict) {
    // Searches the array for a given value and returns the corresponding key if successful  
    // 
    // version: 909.322
    // discuss at: http://phpjs.org/functions/array_search
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: array_search('zonneveld', {firstname: 'kevin', middle: 'van', surname: 'zonneveld'});
    // *     returns 1: 'surname'

    var strict = !!argStrict;
    var key = '';

    for (key in haystack) {
        if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
            return key;
        }
    }

    return false;
}

function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function array_unique(array,numeric){
    // http://blog.doublekai.org/
    // +   original by: sankai (http://blog.doublekai.org/)
    // *     example 1: array_unique([1,2,3,'1','2','3',1,2,3],true);
    // *     returns 1: [1,2,3]    // *     example 2: array_unique([1,2,3,'1','2','3',1,2,3]);
    // *     returns 2: [1,2,3,'1','2','3']
    // *     example 3: array_unique([1,'a','a','1','3',3,'b','c','b',1]);
    // *     returns 3: [1,'a','1','3',3,'b','c']
    // *     example 3: array_unique([1,'a','a','1','3',3,'b','c','b',1],true);    // *     returns 3: [1,'a',3,'b','c']    
    // *     DON'T NEED require function in_array()    
    var tem_arr = new Array();
    for(i=0;i<array.length;i++){
        if(numeric === true && typeof(array[i]) == 'string' && !isNaN(array[i])){             array[i]=parseInt(array[i],10);
        }    
        if(tem_arr.length == 0){
            tem_arr[i] = array[i];
        } else {            var exist = false;
            for(var j=0; j<tem_arr.length; j++){
                if(tem_arr[j] === array[i]){
                    exist = true;
                }            }
            if(!exist){
                if(array[i] != null){
                    tem_arr[i] = array[i];
                }                }
        }
    }
    return tem_arr.join(' ').replace(/\s{2,}/g,' ').split(' ');
}

// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
  var rest = this.slice((to || from) + 1 || this.length);
  this.length = from < 0 ? this.length + from : from;
  return this.push.apply(this, rest);
};

Array.prototype.count = function () {
return this.length;
}
