/**
 * callback must be function that takes on param which is the json output
 * @author Justin McClain
 */
var routerUrl="controller/router.php?action=";

/**
 * Logout user
 * @param {Function} callback
 */
function ajaxLogout(callback){
     return $.ajax({
                      type: "GET",
                      url: routerUrl+"logout",
                      dataType: "json",
                      success: callback
                    });

 }
 /**
  * Login user
  * @param {Object} params
  * @param {Function} callback
  */
 function ajaxLogin(params,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"login",
                      data: params,
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Register User
  * @param {Object} params
  * @param {Function} callback
  */
  function ajaxRegister(params,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"register",
                      data: params,
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Confirm Registration of User
  * @param {String} key
  * @param {Function} callback
  */
  function ajaxConfirmRegistration(key,callback){
     return $.ajax({
                      type: "GET",
                      url: routerUrl+"confirm-registration",
                      data: {"key":key},
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Get current logged in user
  * @param {Function} callback
  */
  function ajaxCurrentUser(callback){
     return $.ajax({
                      type: "GET",
                      url: routerUrl+"get-current-user",
                      dataType: "json",
                      success: callback
                    });
 }
  /**
  * Resets user's password
  * @param {String} key
  * @param {String} password
  * @param {Function} callback
  */
  function ajaxResetPassword(key,password,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"reset-password",
                      data: {key:key,
					  		password:password},
                      dataType: "json",
                      success: callback
                    });
 }
  /**
  * Sends verfication email to user
  * @param {String} email
  * @param {Function} callback
  */
  function ajaxValidateReset(email,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"validate-reset",
                      data: {email:email},
                      dataType: "json",
                      success: callback
                    });
 }
  /**
  * Invites new user 
  * @param {String} email
  * @param {Function} callback
  */
  function ajaxInviteUser(email,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"invite-user",
                      data: {email:email},
                      dataType: "json",
                      success: callback
                    });
 }
  /**
  * Gets events with specified params
  * @param {Object} params
  * @param {Function} callback
  */
  function ajaxGetEvents(params,callback){
     return $.ajax({
                      type: "GET",
                      url: routerUrl+"get-events",
                      data: params,
                      dataType: "json",
                      success: callback
                    });
 }
   /**
  * Make user interested in event
  * @param {Object} id event id
  * @param {Function} callback
  */
  function ajaxInterestInEvent(id,callback){
     return $.ajax({
                      type: "GET",
                      url: routerUrl+"interested-in-event",
                      data: {id:id},
                      dataType: "json",
                      success: callback
                    });
 }
  /**
  * Make user uninterested in event
  * @param {Object} id event id
  * @param {Function} callback
  */
  function ajaxUninterestInEvent(id,callback){
     return $.ajax({
                      type: "GET",
                      url: routerUrl+"uninterested-in-event",
                      data: {id:id},
                      dataType: "json",
                      success: callback
                    });
 }
  /**
  * Search events with specified params
  * @param {Object} params
  * @param {Function} callback
  */
  function ajaxSearchEvents(params,callback){
     return $.ajax({
                      type: "GET",
                      url: routerUrl+"search-events",
                      data: params,
                      dataType: "json",
                      success: callback
                    });
 }
   /**
  * Get Top events by interests
  * @param {Object} params
  * @param {Function} callback
  */
  function ajaxTopEvents(params,callback){
     return $.ajax({
                      type: "GET",
                      url: routerUrl+"top-events",
                      data: params,
                      dataType: "json",
                      success: callback
                    });
 }
   /**
  * Get now and near events
  * @param {Object} params
  * @param {Function} callback
  */
  function ajaxNowAndNearEvents(params,callback){
     return $.ajax({
                      type: "GET",
                      url: routerUrl+"now-and-near",
                      data: params,
                      dataType: "json",
                      success: callback
                    });
 }
   /**
  * Get current whays
  * @param {Object} params
  * @param {Function} callback
  */
  function ajaxWhays(params,callback){
     return $.ajax({
                      type: "GET",
                      url: routerUrl+"get-whays",
                      data: params,
                      dataType: "json",
                      success: callback
                    });
 }
   /**
  * Get Event
  * @param {Integer} id
  * @param {Function} callback
  */
  function ajaxGetEvent(id,callback){
     return $.ajax({
                      type: "GET",
                      url: routerUrl+"get-event",
                      data: {id:id},
                      dataType: "json",
                      success: callback
                    });
 }
   /**
  * Create event
  * @param {Object} params
  * @param {Function} callback
  */
  function ajaxCreateEvent(params,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"create-event",
                      data: params,
                      dataType: "json",
                      success: callback
                    });
 }
   /**
  * Update event
  * @param {Object} params
  * @param {Function} callback
  */
  function ajaxUpdateEvent(params,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"update-event",
                      data: params,
                      dataType: "json",
                      success: callback
                    });
 }
   /**
  * Delete event
  * @param {Integer} id
  * @param {Function} callback
  */
  function ajaxDeleteEvent(id,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"delete-event",
                      data: {id:id},
                      dataType: "json",
                      success: callback
                    });
 }
   /**
  * Create whay
  * @param {Params} whay
  * @param {Function} callback
  */
  function ajaxCreateWhay(params,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"create-whay",
                      data: params,
                      dataType: "json",
                      success: callback
                    });
 }
   /**
  * Get Community feed
  * @param {Object} params
  * @param {Function} callback
  */
  function ajaxCommunityStream(params,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"event-feed",
                      data: params,
                      dataType: "json",
                      success: callback
                    });
 }
   /**
  * Get personal feed
  * @param {Object} params
  * @param {Function} callback
  */
  function ajaxPersonalStream(params,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"personal-feed",
                      data: params,
                      dataType: "json",
                      success: callback
                    });
 }
   /**
  * Get comments
  * @param {integer} id
  * @param {Function} callback
  */
  function ajaxGetComments(id,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"get-comments",
                      data: {id:id},
                      dataType: "json",
                      success: callback
                    });
 }
   /**
  * End current whay
  * @param {Integer} id
  * @param {Function} callback
  */
  function ajaxEndWhay(id,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"end-whay",
                      data: {id:id},
                      dataType: "json",
                      success: callback
                    });
 }
   /**
  * Comments on event
  * @param {Object} params
  * @param {Function} callback
  */
  function ajaxComment(params,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"comment-event",
                      data: params,
                      dataType: "json",
                      success: callback
                    });
 }
   /**
  * Deletes comment
  * @param {Integer} id
  * @param {Function} callback
  */
  function ajaxDeleteComment(id,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"delete-comment",
                      data: {id:id},
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Block requested connection
  * @param {Integer} id
  * @param {Function} callback
  */
  function ajaxBlockConnection(id,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"block-connect",
                      data: {id:id},
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Accept requested connection
  * @param {Integer} id
  * @param {Function} callback
  */
  function ajaxAcceptConnection(id,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"accept-connect",
                      data: {id:id},
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * decline/unblock requested for connection
  * @param {Integer} id
  * @param {Function} callback
  */
  function ajaxDeclineConnection(id,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"decline-connect",
                      data: {id:id},
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Request connection
  * @param {Integer} id
  * @param {Function} callback
  */
  function ajaxRequestConnection(id,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"request-connection",
                      data: {id:id},
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Unfollow a person/connection
  * @param {Integer} id
  * @param {Function} callback
  */
  function ajaxRemoveConnection(id,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"unfollow-connection",
                      data: {id:id},
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Get connection requests
  * @param {Function} callback
  */
  function ajaxGetConnectionRequests(callback){
     return $.ajax({
                      type: "GET",
                      url: routerUrl+"get-connection-requests",
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Get all users the current user is following
  * @param {Function} callback
  */
  function ajaxGetFollowings(callback){
     return $.ajax({
                      type: "GET",
                      url: routerUrl+"get-following",
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Get all the users following the current user
  * @param {Function} callback
  */
  function ajaxGetFollowers(callback){
     return $.ajax({
                      type: "GET",
                      url: routerUrl+"get-followers",
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Get all events user is interested in
  * @param {Object} params
  * @param {Function} callback
  */
  function ajaxGetAgenda(params,callback){
     return $.ajax({
                      type: "GET",
                      url: routerUrl+"get-agenda",
                      data: params,
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Check in to event
  * @param {Integer} id
  * @param {Function} callback
  */
  function ajaxCheckin(id,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"check-in",
                      data: {eid:id},
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Check out to event
  * @param {Integer} id
  * @param {Function} callback
  */
  function ajaxCheckout(id,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"check-out",
                      data: {eid:id},
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Search users
  * @param {Object} params
  * @param {Function} callback
  * @return {Request} ajax request
  */
  function ajaxSearchUsers(params,callback){
     return $.ajax({
                      type: "GET",
                      url: routerUrl+"search-users",
                      data: params,
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Get user informations with specific id or username
  * @param {Integer} id
  * @param {Function} callback
  */
  function ajaxGetUser(id,callback){
     return $.ajax({
                      type: "GET",
                      url: routerUrl+"get-user",
                      data: {id:id},
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Delete current user
  * @param {Function} callback
  */
  function ajaxDeleteUser(callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"delete-user",
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Update user's information
  * @param {Object} params
  * @param {Function} callback
  */
  function ajaxUpdateUser(params,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"update-user",
                      data: params,
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Search tags
  * @param {Object} params
  * @param {Function} callback
  */
  function ajaxSearchTags(params,callback){
     return $.ajax({
                      type: "GET",
                      url: routerUrl+"search-tags",
                      data: params,
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Search locations
  * @param {Object} params
  * @param {Function} callback
  */
  function ajaxSearchLocations(params,callback){
     return $.ajax({
                      type: "GET",
                      url: routerUrl+"search-locations",
                      data: params,
                      dataType: "json",
                      success: callback
                    });
 }
 /**
  * Upload Profile pic
  * @param {Object} params
  * @param {Function} callback
  */
  function ajaxUploadProfilePic(params, callback){
  	return $.ajax({
  		type: "GET",
  		url: routerUrl + "upload-profile-pic",
  		data: params,
  		dataType: "json",
  		success: callback
  	});
  }				
/**
  * Delete Profile Pic
  * @param {Function} callback
  */
  function ajaxDeleteProfilePic(callback){
  	return $.ajax({
  		type: "POST",
  		url: routerUrl + "delete-profile-pic",
  		dataType: "json",
  		success: callback
  	});
  }
 /**
  * Gets Wannago
  * @param {Integer} id
  * @param {Function} callback
  */
  function ajaxGetWannago(id, callback){
  	return $.ajax({
  		type: "GET",
  		url: routerUrl + "get-wannago",
  		data: id,
  		dataType: "json",
  		success: callback
  	});
  }
/**
  * Creates Wannago
  * @param {Object} params
  * @param {Function} callback
  */
  function ajaxCreateWannago(params, callback){
  	return $.ajax({
  		type: "POST",
  		url: routerUrl + "create-wannago",
  		data: params,
  		dataType: "json",
  		success: callback
  	});
  }
  /**
  * Yes for wannago
  * @param {Integer} id
  * @param {Function} callback
  */
  function ajaxWannagoYes(id,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"wannago-yes",
                      data: {eid:id},
                      dataType: "json",
                      success: callback
                    });
 }
  /**
  * No for wannago
  * @param {Integer} id
  * @param {Function} callback
  */
  function ajaxWannagoNo(id,callback){
     return $.ajax({
                      type: "POST",
                      url: routerUrl+"wannago-no",
                      data: {eid:id},
                      dataType: "json",
                      success: callback
                    });
 }  
