var myScheduleIDs,myArtistIDs;
/**********************************
* Show things that are JS required
**********************************/
jQuery(function(){
	jQuery('.hide-if-no-js').each(function(){
		jQuery(this).removeClass('hide-if-no-js');
	});
});


(function(jQuery){
	addShow = function(ShowID){
		if (getCurrentUserID() == false){
			window.location.href = getRedirect();
		}
		else{
			elementCollection.each('show-'+ShowID,function(){jQuery(this).addClass('my_schedule')});
			addIDTo(ShowID,myScheduleIDs);
			jQuery.getJSON(getAjaxURL(),
				{
					'package':'mySchedule',
					'action' : 'my_conference_schedule',
					'my_action':'add',
					'type':'show',
					'object_id':ShowID
				},
				function(data){
					if (data.result == 'success'){
						myScheduleHasChanged();
					}
				}
			);
		}
	}

	removeShow = function(ShowID){
		if (getCurrentUserID() == false){
			window.location.href = getRedirect();
		}
		else{
			elementCollection.each('show-'+ShowID,function(){jQuery(this).removeClass('my_schedule')});
			removeIDFrom(ShowID,myScheduleIDs);
			jQuery.getJSON(getAjaxURL(),
				{
					'package':'mySchedule',
					'action' : 'my_conference_schedule',
					'my_action':'remove',
					'type':'show',
					'object_id':ShowID
				},
				function(data){
					if (data.result == 'success'){
						myScheduleHasChanged();
					}
				}
			);
		}
	}

	addArtist = function(ArtistID,Year){
		if (getCurrentUserID() == false){
			window.location.href = getRedirect();
		}
		else{
			elementCollection.each('artist-'+ArtistID,function(){jQuery(this).addClass('my_artist')});
			addIDTo(ArtistID,myArtistIDs);
			jQuery.getJSON(getAjaxURL(),
				{
					'package':'mySchedule',
					'action' : 'my_conference_schedule',
					'my_action':'add',
					'type':'artist',
					'object_id':ArtistID,
					'_year':Year
				},
				function(data){
					if (data.result == 'success'){
						myArtistsHasChanged();
					}
				}
			);
		}
	}

	removeArtist = function(ArtistID){
		if (getCurrentUserID() == false){
			window.location.href = getRedirect();
		}
		else{
			elementCollection.each('artist-'+ArtistID,function(){jQuery(this).removeClass('my_artist')});
			removeIDFrom(ArtistID,myArtistIDs);
			jQuery.getJSON(getAjaxURL(),
				{
					'package':'mySchedule',
					'action' : 'my_conference_schedule',
					'my_action':'remove',
					'type':'artist',
					'object_id':ArtistID
				},
				function(data){
					if (data.result == 'success'){
						myArtistsHasChanged();
					}
				}
			);
		}
	}

	jQuery(function(){
		jQuery(document.body).delegate('a.mySchedule-add-show', 'click', function(e) {
			var id;
			
			if (jQuery(this).attr('href') != undefined){
				id = jQuery(this).attr('href').match(/sid=([^&]*)/)[1];
			}
			else{
				id = jQuery(this).parent('.mySchedule-controls').attr('class').match(/show-([^ ]*)/)[1]
			}
			addShow(id);
			e.preventDefault();	
			if (callbackManager.run('stop-my-schedule-propagation',true)){
				e.stopPropagation();
				return false;
			}
		});
		jQuery(document.body).delegate('a.mySchedule-remove-show', 'click', function(e) {
			var id;			
			if (jQuery(this).attr('href') != undefined){
				id = jQuery(this).attr('href').match(/sid=([^&]*)/)[1];
			}
			else{
				id = jQuery(this).parent('.mySchedule-controls').attr('class').match(/show-([^ ]*)/)[1]
			}
			removeShow(id);
			e.preventDefault();		
			if (callbackManager.run('stop-my-schedule-propagation',true)){
				e.stopPropagation();
				return false;
			}
		});
		jQuery(document.body).delegate('a.mySchedule-add-artist', 'click', function(e) {
			var id, year;
			if (jQuery(this).attr('href') != undefined){
				id = jQuery(this).attr('href').match(/id=([^&]*)/)[1];
				year = jQuery(this).attr('href').match(/year=([^&]*)/)[1];
			}
			else{
				id = jQuery(this).parent('.mySchedule-controls').attr('class').match(/artist-([^ ]*)/)[1]
				year = jQuery(this).parent('.mySchedule-controls').attr('class').match(/year-([^ ]*)/)[1]				
			}
			addArtist(id,year);
			e.preventDefault();		
			if (callbackManager.run('stop-my-schedule-propagation',true)){
				e.stopPropagation();
				return false;
			}
		});
		jQuery(document.body).delegate('a.mySchedule-remove-artist', 'click', function(e) {
			var id;
			
			if (jQuery(this).attr('href') != undefined){
				id = jQuery(this).attr('href').match(/id=([^&]*)/)[1];
			}
			else{
				id = jQuery(this).parent('.mySchedule-controls').attr('class').match(/artist-([^ ]*)/)[1]
			}
			removeArtist(id);
			e.preventDefault();		
			if (callbackManager.run('stop-my-schedule-propagation',true)){
				e.stopPropagation();
				return false;
			}
		});
	});

	myScheduleHasChanged = function(){
		// Make sure that shows that are in my Schedule still have that class
		for(var i in myScheduleIDs){
			elementCollection.each('show' + '-'+myScheduleIDs[i],function(e,el){
				if (!el.hasClass('my_schedule')){
					el.addClass('my_schedule');
				}
			});
		}
		callbackManager.run('my_schedule_has_changed');
		MySchedule = '';
		if (typeof refresh_view == 'function'){
			refresh_view();
		}
	}

	myArtistsHasChanged = function(){
		for(var i in myArtistIDs){
			elementCollection.each('artist' + '-'+myArtistIDs[i],function(e,el){
				if (!el.hasClass('my_artist')){
					el.addClass('my_artist');
				}
			});
		}
		callbackManager.run('my_artists_has_changed');
		MyArtists = '';
		if (typeof refresh_view == 'function'){
			refresh_view();
		}
	}
	
	addMyScheduleClasses = function(ScheduleSelector,ArtistSelector,FestivalYear){
		addMyScheduleClass(ScheduleSelector,FestivalYear,'schedule');
		addMyScheduleClass(ArtistSelector,FestivalYear,'artists');
	}
	
	addMyScheduleClass = function(selector,FestivalYear,objectType){
		if (selector == undefined){ return; }
		if (typeof(selector) == 'string'){
			selector = [selector];
		}

		if (getCurrentUserID() != false){
			myScheduleIDs = new Array();
			myArtistIDs = new Array();
			jQuery.ajax({ type:"GET", url:getWPAjaxURL(),
				data:"action=my_"+objectType+"_ids&year="+FestivalYear,
				success:function(msg){
					var ids = eval(msg);
					var pattern = (objectType == 'schedule' ? 'show' : 'artist') + '-([0-9]+)';
					var regexp_g = new RegExp(pattern,'g');
					var regexp = new RegExp(pattern);
					for (var s in selector){
						jQuery(selector[s]).each(function(){
							var classes = jQuery(this).attr('class');
							if (classes != undefined){
								var matches = classes.match(regexp_g);
								if (matches && matches.length){
									for (var m=0;m<matches.length;m++){
										elementCollection.add(jQuery(this),(objectType == 'schedule' ? 'show' : 'artist') + '-'+matches[m].match(regexp)[1]);
									}
								}
							}
						});
					}
					if (ids && ids.length){
						for(var i in ids){
							if (objectType == 'schedule'){
								myScheduleIDs.push(ids[i]);
							}
							else{
								myArtistIDs.push(ids[i]);
							}
						}
						if (objectType == 'schedule'){
							myScheduleHasChanged();
						}
						else{
							myArtistsHasChanged();
						}
					}
				}
			});
		}
	}
	
	addIDTo = function(id,what){
		what.push(id);
	}
	removeIDFrom = function(id,what){
		var w = arrayPosition(id,what);
		if (w != -1){
			what.splice(w, 1);
		}
	}
	arrayPosition = function (id,what){
		for (var w in what){
			if (what[w] == id){
				return w;
			}
		}
		return -1;
	}
	
})(jQuery);


