/*
 * Traackr JavaScript Library
 *
 * Copyright - 2008-2010 Traackr, Inc. All rights reserved.
 */
if ( typeof( TRAACKR ) == "undefined" ) TRAACKR = {};

/*
 * Configure base URL for all ajax calls
 */
if ( typeof( TRAACKR_CF ) == "undefined" ) TRAACKR_CF = {};
TRAACKR_CF = {
   app_base_url: '/'
}

TRAACKR = function() {

   // Initialization works
   $(document).ready(function() {
      // Crops all logo images
      $('.logo_img').crop(0, 0, 70, 220,
         TRAACKR_CF.app_base_url+'img/logo_transparent.png');
   });

   /*             */
   /* Adds a note */
   /*             */
   var __add_note = function() {
      // prevent empty notes
      if( $('#add_note_form textarea').val().match(/^\s*$/) ) return false;
      $('#add_note_form').ajaxSubmit(__add_note_submit); 
   } // End function __add_note()

   /*                                        */
   /* Callback function for form ajax submit */
   /*                                        */
   var __add_note_submit = function(data) {
      $('#notes').prepend(data);
      if ( document.add_note_form['data[Note][text]'] ) {
         document.add_note_form['data[Note][text]'].value = '';
      }
      if ( document.add_note_form['data[SearchNote][text]'] ) {
         document.add_note_form['data[SearchNote][text]'].value = '';
      }
      if ( document.add_note_form['data[PerformanceNote][description]'] ) {
         document.add_note_form['data[PerformanceNote][description]'].value = '';
      }
   } // End function __add_note_submit()

   /*                      */
   /* Makes notes editable */
   /*                      */
   var __set_editable_notes = function(type) {
      $('.editable_note').livequery(function(){
         $(this).editable(
            TRAACKR_CF.app_base_url+'notes/update',
            {  data: function(value, settings) {
                  // Converts value which might include HTML entities back to text
                  // Have to convert <br> to nee line for IE
                  var v = value.replace(/<BR>/g, "\n");
                  //return $('<pre>').html(v).text().trim(); // Does not work on IE
                  return $('<pre>'+v+'</pre>').text().trim();
               },
               loaddata: {type: type},
               submitdata: {type: type},
	       type: 'textarea', onblur: 'submit',
	       cols: 80, rows: 4
            }
         );
      });
   } // End function __set_editable_notes

   /*                                                       */
   /* Deletes a note                                        */
   /* Can handle regular (influencer) and performance notes */
   /*                                                       */
   var __del_note = function(type, id) {
      $.get(
         TRAACKR_CF.app_base_url+'notes/delete/'+type+'/'+id,
         function(data){ $('#note_'+id).hide('blind'); }
      );
   } // End function __del_note()

   /*                           */
   /* Updates a campaign status */
   /*                           */
   var __set_status_campaign = function(id, is_public) {

      $.get(TRAACKR_CF.app_base_url+'campaigns/update_field/'+
         id+'/is_public/'+ is_public,
         function(data) {
            $('#campaign_short_name').toggle();
         }
      );
      
   } // End function __set_search_status()

   /*                                */
   /* Updates a campaigns short name */
   /*                                */
   var __set_shortname_campaign = function(id, shortname) {

      $.get(TRAACKR_CF.app_base_url+'campaigns/update_field/'+
         id+'/short_name/'+ shortname,
         function(data) {
            if ( data != '' ) {
               url = 'http://lists.traackr.com/'+data
            }
            else {
               url = ''
            }
            $('#campaign_short_name_url').html(url);
         }
      );
      
   } // End function __setshortname_campaign()


   /*                   */
   /* Delete a campaign */
   /*                   */
   var __del_campaign = function(id) {
         del = window.confirm("Are you sure you want to delete this campaign?\n"
            +"All data will be lost.");
         if ( del ) {
            $.get(
               TRAACKR_CF.app_base_url+'campaigns/delete/'+id,
               function(data){
                  $('#search_'+id).hide('blind');
                  $('#search_'+id).remove();
               } // End success callback
            );
         } // Del confirmed
   } // End function del_search()

   /*                       */
   /* Update account's logo */
   /*                       */
   var __update_logo = function() {
      $('#update_logo_form').ajaxSubmit(function(data) {
         $('#logo_display_elm').html(data);
         $('#new_logo_img').crop(0, 0, 70, 220,
            TRAACKR_CF.app_base_url+'img/logo_transparent.png');
      });
   } // End function __updaet_account_logo()

   
   /*                   */
   /*  Public functions */
   /*                   */
   return {
      notes: {
         del: __del_note,
         add: __add_note,
         set_editable: __set_editable_notes
      },
      campaigns: {
         del: __del_campaign,
         set_status: __set_status_campaign,
         update_logo: __update_logo,
         set_shortname: __set_shortname_campaign
      },
      accounts: {
         update_logo: __update_logo
      }
   } // End return public functions

}(); // End library TRAACKR


/*
 * Add trim() function to String
 */
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
} // End function trim()

/*
 * Filter searches displayed
 */
var filter_searches = function(search_class) {

      $('div.search').hide();
      $('div.'+search_class).show();

} // End function filter_searches()


/*
 * Reset all tasks to hide
 */
var reset_tasks = function(task_id) {

   // Reset except task_id if passed
   if ( task_id ) {
      $('.task div.task_details:not(#task_detail_'+task_id+')').hide();
      $('.task div.task_show_details:not(#plus_'+task_id+')').hide();
      $('.task div.task_hide_details:not(#minus_'+task_id+')').hide();
   }
   else {
      $('.task .task_details').hide();
      $('.task .task_show_details').hide();
      $('.task .task_hide_details').hide();
   }
   
} // End function reset_tasks

/*
 * Toogle showing hiding task
 */
var toggle_task = function(task_id) {

   // Reset all tasks except current task
   reset_tasks(task_id);
   // Toggle current task
   $('.task #task_detail_'+task_id).toggle();
   $('.task #plus_'+task_id).toggle();
   $('.task #minus_'+task_id).toggle();
   // Trigger edit on description
   $('#task_detail_'+task_id+' .task_empty_desc').click();
   
} // End function toggle_task()


/*
 * Save the is_completed flag on a task
 */
var complete_task = function(checkbox, base_url) {

   if (checkbox.checked) {
      $('#task_span_'+checkbox.value+'__text').removeClass('task_notcompleted');
      $('#task_span_'+checkbox.value+'__text').addClass('task_completed');
   } else {
      $('#task_span_'+checkbox.value+'__text').removeClass('task_completed');
      $('#task_span_'+checkbox.value+'__text').addClass('task_notcompleted');
   }
	
   $truefalse = '0';
   if (checkbox.checked) {
      $truefalse = '1';
   }
	
   $.get(base_url + checkbox.value +'/is_completed/'+ $truefalse  +'/',
      function(data) {
      }
      );
} // End function complete_task()


