// Add methods on load
Event.observe(window, 'load', function() {
	/* GENERAL UTILITY */
	$$('.help_roll').each(function(button, i) {
	  button.observe('mouseover', helpRoll);
	  button.observe('mouseout', helpRollClose);
  });
  
  
	/* END GENERAL UTILITY */
	
	/* COMMON ELEMENTS */ 
  $$('img.click').each(function(button, i) {
	  button.observe('mousedown', function(){
	    button.setStyle({backgroundImage: 'url(/images/css_images/thumb_emboss_down.jpg)'});
	  });
	  button.observe('mouseup', function(){
	    button.setStyle({backgroundImage: 'url(/images/css_images/thumb_emboss.jpg)'});
	  });
  });
  $$('.home_button img').each(function(button, i) {
	  button.observe('mousedown', function(){
	    button.setStyle({backgroundImage: 'url(/images/css_images/home_button_bg_down.png)'});
	  });
	  button.observe('mouseup', function(){
	    button.setStyle({backgroundImage: 'url(/images/css_images/home_button_bg.png)'});
	  });
  });
  $$('#home_wrapper #language_nav li img').each(function(button, i) {
	  button.observe('mousedown', function(){
	    button.setStyle({backgroundImage: 'url(/images/css_images/home_lang_bg_down.png)'});
	  });
	  button.observe('mouseup', function(){
	    button.setStyle({backgroundImage: 'url(/images/css_images/home_lang_bg.png)'});
	  });
  });
  $$('.image_text').each(function(button, i) {
	  button.observe('mousedown', function(){
	    link_img  = $(button).previousSiblings().find(function(sib, i){
	      return sib.hasClassName('click');
	    });
      $(link_img).setStyle({backgroundImage: 'url(/images/css_images/thumb_emboss_down.jpg)'});
	  });
  });
  $$('.image_text').each(function(button, i) {
	  button.observe('mouseup', function(){
	    link_img  = $(button).previousSiblings().find(function(sib, i){
	      return sib.hasClassName('click');
	    });
      $(link_img).setStyle({backgroundImage: 'url(/images/css_images/thumb_emboss.jpg)'});
	  });
  });
  $$('#product_map_link').each(function(button, i) {
	  button.observe('mousedown', function(){
	    link_img  = $(button).childElements().find(function(child, i){
      return child.hasClassName('map_view');
    });
    link_img.setStyle({backgroundImage: 'url(/images/css_images/map_bg_down.png)'});
	  });
  });
  $$('#product_map_link').each(function(button, i) {
	  button.observe('mouseup', function(){
	    link_img  = $(button).childElements().find(function(child, i){
      return child.hasClassName('map_view');
    });
    link_img.setStyle({backgroundImage: 'url(/images/css_images/map_bg.png)'});
	  });
  });
  $$('.buy_now').each(function(button, i) {
	  button.observe('mousedown', function(){
	    button.src  = '/images/css_images/buy_now_down.png';
	  });
	  button.observe('mouseup', function(){
	    button.src  = '/images/css_images/buy_now.png';
	  });
  });
	
	/* END COMMON ELEMENTS */	
	
	/* PLAYLISTS */
	// add tracks to playlist
	$$('#download_button img').each(function(button, i) {
	  button.observe('click', downloadPlaylist);
  });
	$$('.add_to_playlist').each(function(button, i) {
	  button.observe('click', addTrackToPlaylist);
  });
  $$('.delete_from_playlist').each(function(button, i) {
	  button.observe('click', deleteTrackFromPlaylist);
  });
  $$('.order_up').each(function(button, i) {
	  button.observe('click', resortTracks);
	  button.observe('mouseover', resortOver);
	  button.observe('mouseout', resortOut);
  });
  $$('.order_down').each(function(button, i) {
	  button.observe('click', resortTracks);
	  button.observe('mouseover', resortOver);
	  button.observe('mouseout', resortOut);
  });
  $$('.sampled_button').each(function(button, i) {
	  button.observe('click', sampleTrack);
  });
  $$('.highlighted_button').each(function(button, i) {
	  button.observe('click', highlightTrack);
  });
  
  /* END PLAYLISTS */
  
  /* DOWNLOAD TOURS */
  $$('.download_tour img').each(function(button, i) {
	  //button.observe('click', downloadTour);
  });
  /* END DOWNLOAD TOURS */
  
  /* FILE LOADING */
  $$('.file_uploading').each(function(form, i) {
	  form.observe('submit', uploadFile);
  });
  $$('.file_picker_link').each(function(form, i) {
	  form.observe('click', filePicker);
  });
  $$('.s3file_picker_link').each(function(form, i) {
	  form.observe('click', filePickerS3);
  });
  
  /* END FILE LOADING */

  
});

/* GENERAL UTILITY */
function helpRoll(e) {
  helpImg     = e.findElement('img');
  help_msg    = helpImg.readAttribute('help_msg');
  
  var helpMsg = document.createElement('div');
  helpMsg.id  = 'helpMsg';
  helpMsg.setStyle({display : 'none'});
  helpMsg.update(help_msg);
  helpMsg.clonePosition(helpImg, {
    setWidth : false,
    setHeight : false,
    offsetLeft : 15,
    offsetTop : -20
  });

  document.body.insert(helpMsg);
  helpMsg.appear();
}
function helpRollClose(e) {
  $('helpMsg').remove();
}
/* END GENERAL UTILITY */

/* COMMON ELEMENTS */ 

/* END COMMON ELEMENTS */ 

/* PLAYLISTS */
function addTrackToPlaylist(e) {
  g_table     = e.findElement('table');
  g_row       = e.findElement('tr');
  g_img       = e.findElement('img');
  
  db_row_id   = g_row.id.gsub((g_table.id + '_row_'), '')
  playlist_id = $$('.playlist_track_wrapper')[0].id.gsub('playlist_track_wrapper', '');
  
  pl_table    = $('playlist_tracks_table');
  row_count   = pl_table.tBodies[0].rows.length;
  
  create_url  = '/playlist/create_track?id='+playlist_id+'&track_id='+db_row_id;
  // send create track
  new Ajax.Request(create_url, {
    onSuccess: function(t) {
      response  = t.responseText;
      // remove row from all tracks table
      g_row.remove();
      
      // insert row into table
      pl_table.tBodies[0].insert(response, 'bottom');
      
      // get row
      new_row = pl_table.tBodies[0].rows[row_count];
      // deal with cells
      delete_button = new_row.descendants().each(function(d) {
        if (d.hasClassName('order_up')) d.observe('click', resortTracks);
        if (d.hasClassName('order_down')) d.observe('click', resortTracks);
        if (d.hasClassName('delete_from_playlist')) d.observe('click', deleteTrackFromPlaylist);
      });
      
      // RESORT BOTH TABLES
      sortReset(pl_table, 'pt_order_column');
      sortReset(g_table, 't_title_column');
      // re-calculate playlist totals
      calcPlaylist();
    }
  });
}

function deleteTrackFromPlaylist(e) {
  g_table         = e.findElement('table');
  g_row           = e.findElement('tr');
  g_img           = e.findElement('img');
  db_row_id       = g_row.id.gsub((g_table.id + '_row_'), '')
  playlist_id     = $$('.playlist_track_wrapper')[0].id.gsub('playlist_track_wrapper', '');
  ct_table        = $('all_client_tracks');
  row_count       = ct_table.tBodies[0].rows.length;
  delete_url      = '/playlist/destroy_track?id='+playlist_id+'&track_id='+db_row_id;
  // send delete track
  new Ajax.Request(delete_url, {
    onSuccess: function(t) {
      response = t.responseText;
      
      // update order for rows below
      g_row.nextSiblings().each(function(r) {
        order_cell  = r.descendants().find(function(c){
          return c.hasClassName('pt_order');
        });
        order_cell.update(order_cell.innerHTML - 1)
      });
      
      // remove row from playlist tracks table
      g_row.remove();
      
      // insert row into table
      ct_table.tBodies[0].insert(response, 'bottom');
      
      // get row
      new_row = ct_table.tBodies[0].rows[row_count];
    
      // deal with cells
      add_button = new_row.descendants().find(function(d) {
        return d.hasClassName('add_to_playlist');
      })
      add_button.observe('click', addTrackToPlaylist);
      
      // RESORT BOTH TABLES
      sortReset(g_table, 'pt_order_column');
      sortReset(ct_table, 't_title_column');
      // re-calculate playlist totals
      calcPlaylist();
    }
  });
}

function calcPlaylist(table) {
  // calc length
  track_length  = 0;
  $$('.track_length').each(function(d,index){
    track_length  += parseInt(d.innerHTML);
  })
  
  // calc price
  track_price  = 0;
  $$('.track_price').each(function(d,index){
    cur           = d.innerHTML.substr(0,1),
    track_price  += parseInt(d.innerHTML.substr(1));
  })
  
  // calc size
  track_size  = 0;
  $$('.track_size').each(function(d,index){
    if (!d.empty()) track_size  += parseInt(d.innerHTML);
  })
  
  // update page
  $('track_length_total').update(track_length+' <i>secs</i>');
  $('track_price_total').update(cur+track_price);
  $('track_size_total').update(track_size+' <i>kB</i>');
}

function resortTracks(e) {
  g_table     = e.findElement('table');
  g_table     = $(g_table);
  row_count   = g_table.tBodies[g_table.tBodies.length - 1].rows.length;
  g_row       = e.findElement('tr');
  g_row       = $(g_row);
  g_img       = e.findElement('img');
  g_img       = $(g_img);
  db_row_id   = g_row.id.gsub((g_table.id + '_row_'), '')
  playlist_id = $$('.playlist_track_wrapper')[0].id.gsub('playlist_track_wrapper', '');
  sort_dir    = g_img.className.gsub('order_', '');
  order_cell  = g_row.descendants().find(function(c){
    return c.hasClassName('pt_order');
  });
  order_cell  = $(order_cell);
  cur_order   = order_cell.innerHTML;
  new_order   = 0;
  if (sort_dir == 'up' && cur_order > 1) new_order = cur_order - 1;
  if (sort_dir == 'down' && cur_order < row_count) new_order = parseInt(cur_order) + 1;
  // change image
  g_img.src = '/images/push_'+sort_dir+'2_click.png';
  
  
  resort_url  = '/playlist/resort_track?id='+playlist_id+'&track_id='+db_row_id+'&new_order='+new_order;
  
  if (new_order > 0) {
    // send delete track
    new Ajax.Request(resort_url, {
      onSuccess: function(t) {
        response = t.responseText;
      
        // Push the track up one
        if (sort_dir == 'up' && cur_order > 1) {
          new_order = cur_order - 1;
          order_cell.update(new_order)
          row_above = g_row.previousSiblings()[0];
          $(row_above).descendants().find(function(c){
            return c.hasClassName('pt_order');
          }).update(cur_order);
        }

        // Push the track down one
        if (sort_dir == 'down' && cur_order < row_count) {
          new_order = parseInt(cur_order) + 1;
          order_cell.update(new_order)
          row_below = g_row.nextSiblings()[0];
          $(row_below).descendants().find(function(c){
            return c.hasClassName('pt_order');
          }).update(cur_order);
        }
        
        // RESORT
        sortReset(g_table, 'pt_order_column');
        // revert image
        g_img.src = '/images/push_'+sort_dir+'2.png';        
      }
    });
  }
}

// Change button image for mouse over and out
function resortOver() {
  sort_dir    = this.className.gsub('order_', '');
  this.src   = '/images/push_'+sort_dir+'2_over.png';
}
function resortOut() {
  sort_dir    = this.className.gsub('order_', '');
  this.src   = '/images/push_'+sort_dir+'2.png';
}

function downloadPlaylist(e) {
  button        = e.findElement('img');
  playlist_id   = button.id.gsub('playlist_download_', '');
  download_url  = '/playlist/download_playlist?id='+playlist_id;
  
  var holdingImage  = document.createElement('img');
  holdingImage.src  = '/images/ajax-loader.gif';
  var holdingText   = document.createElement('h4');
  holdingText.update('please wait...');
  
  var downloadDiv       = document.createElement('div');
  downloadDiv.id        = 'downloadDiv';
  downloadDiv.className = 'playlist_details_inner'; 

  downloadDiv.insert(holdingImage);
  downloadDiv.insert(holdingText);
  $('playlist_details_wrapper').insert(downloadDiv);
  
  new Ajax.Request(download_url, {
    onSuccess: function(t) {
      window.open(t.responseText,'download_playlist_window');
      downloadDiv.remove();
    }
  });
  
}

function downloadTour(e) {
  button        = e.findElement('img');
  product_id    = button.id.gsub('product_download_', '');
  download_url  = '/public/download_tour?id='+product_id;
  /*
  var holdingImage  = document.createElement('img');
  holdingImage.src  = '/images/ajax-loader.gif';
  var holdingText   = document.createElement('h4');
  holdingText.update('please wait...');
  
  var downloadDiv       = document.createElement('div');
  downloadDiv.id        = 'downloadDiv';
  downloadDiv.className = 'playlist_details_inner'; 

  downloadDiv.insert(holdingImage);
  downloadDiv.insert(holdingText);
  $('wrapper').insert(downloadDiv);
  */
  
  new Ajax.Request(download_url, {
    onSuccess: function(t) {
      window.open(t.responseText,'download_tour_window');
    }
  });
  
}

// clean up previous sorts
// this only works with sorttable.js
function sortReset(table, sort_column) {
  table = $(table);
  cleanup = function(table) {
    table.descendants().each(function(d){
      d = $(d);
      d.removeClassName('sorttable_sorted');
      d.removeClassName('sorttable_sorted_reverse');
      if (d.id == 'sorttable_sortrevind') d.remove();
      if (d.id == 'sorttable_sortfwdind') d.remove();
    });
  }
  
  cleanup(table);
  
  if (document.all) {
    $(sort_column).fireEvent("onclick");
  } else {
    var evObj = document.createEvent('MouseEvents');
    evObj.initEvent('click', true, true);
    $(sort_column).dispatchEvent(evObj);
  }
  
  
  cleanup(table);
  
}

// Choose a sample track from a playlist
function sampleTrack(e) {
  g_table     = e.findElement('table');
  g_row       = e.findElement('tr');
  g_img       = e.findElement('img');
  db_row_id   = g_img.id.gsub('sampled_button', '')
  
  // determine whether pt_sample should be turned on or not
  if(g_img.src.search('cancel') > 1){
    pt_sample = 1;
  } else {
    pt_sample = 0;
  }
  
  update_sample_track_url  = '/playlist_admin/update_sample_track?id='+db_row_id+'&pt_sample='+pt_sample;
  
  // send update sample track
  new Ajax.Request(update_sample_track_url, {
    onSuccess: function(t) {
      response  = t.responseText;
      
      // update buttons
      
      $$('.sampled_button').each(function(button, i) {
    	  button.src  = '/images/cancel_s.png';
      });
      if (pt_sample == 1) {
        g_img.src = '/images/button_ok_s.png';
      }
    }
  });
  
}

// Highlight a track from a playlist
function highlightTrack(e) {
  g_table     = e.findElement('table');
  g_row       = e.findElement('tr');
  g_img       = e.findElement('img');
  db_row_id   = g_img.id.gsub('highlighted_button', '')
  
  // determine whether pt_highlight should be turned on or not
  if(g_img.src.search('off') > 0){
    pt_highlight = 1;
  } else {
    pt_highlight = 0;
  }
  
  update_highlight_track_url  = '/playlist_admin/update_highlight_track?id='+db_row_id+'&pt_highlight='+pt_highlight;
  
  // send update highlight track
  new Ajax.Request(update_highlight_track_url, {
    onSuccess: function(t) {
      response  = t.responseText;
      
      // update button
      if (pt_highlight == 1) {
        g_img.src = '/images/star_s.png';
      } else {
        g_img.src = '/images/star_off_s.png';
      }
    }
  });
  
}

/* END PLAYLISTS */
/* PRODUCTS */

// Deletes a related product from a product
// TODO: make this smarter, add onload, update select on completion
function delete_related_product(related_product_id, product_id) {
  
  delete_related_product_url  = '/product_admin/delete_related_product?id='+product_id+'&related_product_id='+related_product_id;
  
  // send update highlight track
  new Ajax.Request(delete_related_product_url, {
    onSuccess: function(t) {
      response  = t.responseText;
      // get li we are deleteing
      rp_li = $('related_product_'+related_product_id);
      rp_li.remove();
    }
  });
  
}

// TODO: add_related_product funtion, update select on completion

/* END PRODUCTS */
/* FILE LOADING */

function uploadFile(e) {
  
  loadingHolding();
  
  var uploadFrame   = document.createElement('iframe');
  uploadFrame.id    = 'uploadFrame';
  uploadFrame.name  = 'uploadFrame';
  document.body.insert(uploadFrame);

  return false;
  
}
// show 'please wait' page
function loadingHolding() {
  // get body height
  windowHeight      = document.viewport.getHeight();
  windowWidth       = document.viewport.getWidth();
  bodyHeight        = $('header').getHeight() + $('main').getHeight() + $('footer').getHeight() + 30;
  if ($('navigation')) {
    bodyHeight  += $('navigation').getHeight();
  }
  divHeight         = windowHeight > bodyHeight ? windowHeight : bodyHeight;
  
  var pageDiv       = document.createElement('div');
  pageDiv.id        = 'pageDiv';
  pageDiv.setStyle({ height: divHeight+'px' });
  document.body.insert(pageDiv, 'top');
  
  var holdingImage  = document.createElement('img');
  holdingImage.src  = '/images/ajax-loader.gif';
  var holdingText   = document.createElement('h4');
  holdingText.update('please wait...');
  
  var holdingDiv    = document.createElement('div');
  holdingDiv.id     = 'holdingDiv';
  divWidth          = holdingDiv.getStyle('width').gsub('px', '');
  divLeft           = (windowWidth / 2) - (divWidth / 2);
  holdingDiv.setStyle({ top: '300px', left: divLeft+'px' });
  
  holdingDiv.insert(holdingImage);
  holdingDiv.insert(holdingText);
  document.body.insert(holdingDiv, 'top');
  
}

// pick and existing file to attach
function filePicker() {
  windowWidth       = document.viewport.getWidth();
  var pickerDiv     = document.createElement('div');
  pickerDiv.id      = 'pickerDiv';
  divWidth          = pickerDiv.getStyle('width').gsub('px', '');
  divLeft           = (windowWidth / 2) - (divWidth / 2);
  pickerDiv.setStyle({ top: '150px', left: divLeft+'px' });

  document.body.insert(pickerDiv, 'top');
  
  picker_url  = '/playlist/file_picker';
  // send file picker
  new Ajax.Request(picker_url, {
    onSuccess: function(t) {
      var pickerDiv = $('pickerDiv');
      pickerDiv.update(t.responseText);
      $('close_file_picker').observe('click', function(elm, i){pickerDiv.remove()})
      $$('.picker_image').each(function(elm, i) {
    	  elm.observe('click', function(e) {
          img_choice  = e.findElement('img');
          file        = img_choice.src;
          file_name   = file.substring(file.lastIndexOf('/')+1)
          $('playlist_attach_o_tron_file').value = file_name.gsub('tn_', '').gsub(/\?\d+/, '');
          $$('#image_file img')[0].src = file;
          pickerDiv.remove();
        });
      });
    }
  });
}

// pick and existing file to attach (from Amazon S3)
function filePickerS3() {
  windowWidth       = document.viewport.getWidth();
  var pickerDiv     = document.createElement('div');
  pickerDiv.id      = 'pickerDiv';
  divWidth          = pickerDiv.getStyle('width').gsub('px', '');
  divLeft           = (windowWidth / 2) - (divWidth / 2);
  pickerDiv.setStyle({ top: '150px', left: divLeft+'px' });

  document.body.insert(pickerDiv, 'top');
  if ($$('.s3file_picker_link')[0].hasClassName('client_picker')){
    picker_url  = '/track_admin/file_picker'
  } else {
    picker_url  = '/track/file_picker';
  }
  // send delete track
  new Ajax.Request(picker_url, {
    onSuccess: function(t) {
      var pickerDiv = $('pickerDiv');
      pickerDiv.update(t.responseText);
      $('close_file_picker').observe('click', function(elm, i){pickerDiv.remove()})
      $$('#file_list li').each(function(elm, i) {
    	  elm.observe('click', function(e) {
          file_name = e.findElement('li').innerHTML;
          file_size = e.findElement('li').readAttribute('file_size')
          $('track_attach_o_tron_file').value = file_name;
          $('track_file_size').value = file_size;
          $('track_mp3_file_name').update(file_name);
          pickerDiv.remove();
        });
      });
    }
  });
}


/* END FILE LOADING */

/* ORDERS ADMIN */
function adminOrderChooseClient(client_id) {
  url = '/order_admin/create_choose_playlist?client_id='+client_id;
  // send client choice
  new Ajax.Request(url, {
    onSuccess: function(t) {
      $('create_choose_playlist').update(t.responseText);
      $('create_all_fields').update('');
      $('create_addresses').update('');
      $('create_addresses').hide();
    }
  });
}

function adminOrderChoosePlaylist (playlist_id) {
  client_id       = $('order_client_id').value;
  all_fields_url  = '/order_admin/create_all_fields?playlist_id='+playlist_id+'&client_id='+client_id;
  // send playlist, client for all fields
  new Ajax.Request(all_fields_url, {
    onSuccess: function(t) {
      $('create_all_fields').update(t.responseText);
    }
  });
  addresses_url   = '/order_admin/create_addresses?client_id='+client_id;
  // send client for addresses
  new Ajax.Request(addresses_url, {
    onSuccess: function(t) {
      $('create_addresses').update(t.responseText);
      $('create_addresses').show();
    }
  });
}

/* END ORDERS ADMIN */

/* YOUR ACCOUNT */
function toggleShippingAddress(elm) {
  if (elm.checked) {
    $('shipping_body').hide();
  } else {
    $('shipping_body').show();
  }
}

/* END YOUR ACCOUNT */

// DEBUGGING
// TODO: Move to general functions
debugit = false;
function debuggery() {
	// set global variable to true
	debugit         = true;
	var debugdiv		= document.createElement('div');
	debugdiv.id			= 'debugdiv';
	debugdiv.innerHTML 	= 'Debugger';
	document.body.appendChild(debugdiv);
}
function debugInfo(debug_msg) {
	if (debugit) {
		var debuginfo		= document.createElement('div');
		debuginfo.innerHTML = debug_msg;
		$('debugdiv').appendChild(debuginfo);
	}
}
/**** HOW TO USE ****
// within your script/function, collect debug info:
var debug_msg		= players[n].slide_state;
debugInfo(debug_msg);

// at the end of your javascript, call
Event.observe(window, 'load', debuggery);
*/
// End debugger