//var $ = jQuery.noConflict();

//$.ajaxSetup({ 
//  'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
//})

$(function() {
  // activates Fancybox for links with the fancybox class
  $('a.fancybox').fancybox({
      'titleShow' : false,
      'autoScale' : false,
      'overlayColor' : '#000',
      'overlayOpacity' : '0.8'
    });

  // $("#meta").submitWithAjax();
 
  // Hides any element with class hidden
  // $('.hidden').hide();

  // Show/hide modules
  $('.module h2 span.left a,.topic_module h2 span.left a').click(function(){
    var element_id = $(this).attr('rel');
    if($(element_id).is(':visible')) {
      $(element_id).hide();  
    } else {
      $(element_id).show();    
    }
    return false; 
  });

   // Show/hide items
  $('li.sortable').click(function(){
    var element_id = $(this).attr('rel');
    if($(element_id).is(':visible')) {
      $(element_id).hide();
    } else {
      $(element_id).show();
    }
    return false;
  });


  // Hover effect on table rows
  $('table.list').table_highlighter(); 

  // Generic ajax get request (js)
  $('a.remote_get').live('click', function(){
    var url = $(this).attr('href');
    $.ajax({
      type: "GET",
      dataType: "script",
      url: url
    });
    return false;
  });

  // Generic ajax link (get) - replace element
  $('a.remote_get_replace').live('click', function(){
    var url = $(this).attr('href');
    var elementId = $(this).attr('rel');
    $.ajax({
      type: "GET",
      url: url, 
      success: function(html){ 
        elementId ? $(elementId).replaceWith(html) : $('#main_content').html(html);
      }
    });
    return false; 
  });

  // Generic ajax link (get) - insert in element
  $('a.remote_get_insert').live('click', function(){
    var url = $(this).attr('href');
    var elementId = $(this).attr('rel');
    $.ajax({
      type: "GET",
      url: url, 
      success: function(html){ 
        elementId ? $(elementId).html(html) : $('#main_content').html(html);
      }
    });
    return false; 
  });
  
  // Generic ajax link (put)  - replace element
  $('a.remote_put_replace').click(function(){
    var url = this.href;
    var elementId = $(this).attr('rel');
    $.ajax({
      type: "PUT",
      url: url, 
      success: function(html){  
        elementId ? $(elementId).replaceWith(html) : $('#main_content').replaceWith(html);
      }
    });
    return false; 
  });

  // Generic ajax link (put)  - replace element
  $('a.remote_post_replace').click(function(){
    var url = this.href;
    var elementId = $(this).attr('rel');
    $.ajax({
      type: "POST",
      url: url, 
      success: function(html){  
        elementId ? $(elementId).replaceWith(html) : $('#main_content').replaceWith(html);
      }
    });
    return false; 
  });

  $('a.remote_delete_insert').click(function(){
    var url = this.href;
    var elementId = $(this).attr('rel');
    var confirm = $(this).attr('confirm');
    $.ajax({
      type: "DELETE",
      url: url, 
      success: function(html){  
        elementId ? $(elementId).html(html) : $('#main_content').replaceWith(html);
      }
    });
    return false; 
  });

  // Generic Ajax form
  $('form.remote').live('click', function(){
    $(this).ajaxForm({ 
      target: $(this).attr('rel'),
      dataType: 'script'
      })
  });

  // Generic Ajax form
  $('form.remote_put').live('click', function(){  
    $(this).ajaxForm({ 
      target: $(this).attr('rel'), 
      dataType: 'script' 
      })
  });
  
  //$('#meta_form').submit(function() { 
  //  // submit the form 
  //  $(this).ajaxSubmit(); 
  //  // return false to prevent normal browser submit and page navigation 
  //  return false; 
  //});
  //

  $('.datepicker').datepicker($.datepicker.regional[$('#language').text()])
    .click(function(){
      $(this).attr('readonly','true')
    });  


  // Global ajax indicator. Fades container and adds a spinner
  $("#loading").bind("ajaxSend", function(e){  
    $(this).fadeIn(200);  
    $('#container').animate({'opacity':'0.5'}, 200);  
  }).bind("ajaxComplete", function(){
    $(this).fadeOut(200);    
    $('#container').animate({'opacity':'1'}, 200);  
    $('.datepicker').datepicker($.datepicker.regional[$('#language').text()])
      .click(function(){
        $(this).attr('readonly','true')
      }); 
    setUpColorPicker(); 
    getHeights();  
  });     

  // Toggles sidebar nav elements and sets a cookie if they are closed
  $('#sidebar_nav .block').each(function(){
    var groupName = "qe_" + $(this).attr('id');
    var link = $(this).find('.menucat');
    var group = $(this).find('.menugroup');
    var cookie = $.cookie(groupName);
    if(cookie == 'hide'){
      group.hide();
    }
    link.click(function(){
      //$('#expand_groups').removeClass('open');
      group.is(':visible') ? $.cookie(groupName, "hide", { path: '/'}) : $.cookie(groupName, null, { path: '/'});
      group.toggle('blind', 200);
    });
  });

  // Toggles ip project and sets a cookie if they are closed
  $('#main_content .project').each(function(){
    var listName = "ip_" + $(this).attr('id');
    var link = $(this).find('.module_title .title');
    var list = $(this).find('.module_content');
    var cookie = $.cookie(listName);
    if(cookie == 'hide'){
      list.hide();
    }
    link.click(function(){
      //$('#expand_list').removeClass('open');
      list.is(':visible') ? $.cookie(listName, "hide", { path: '/'}) : $.cookie(listName, null, { path: '/'});
      list.toggle('blind', 200);
      return false;
    });
  });

  $('.filteritem input').hide();
  $('input.ajax').hide();  
  // Ajax form for search items, keywords, etc.
  var filteritems = $('.filteritem'); 
  filteritems.each(function(){   
    var filterlabel = $(this).find('label');
    var filtercheckbox = $(this).find('input');
    
    filtercheckbox.attr('checked') ? filterlabel.addClass('active') : filterlabel.removeClass('active');
    
    $(this).click(function(){
      if($(this).find('input').attr('checked')){
        filtercheckbox.attr('checked', '');
        filterlabel.removeClass('active');
      }else{
        filtercheckbox.attr('checked', 'checked');
        filterlabel.addClass('active');
      }
      submitSearchFilters('#query_form');
    });
  });  
  
  // $('.filteritem').live('click',function(){ 
  //   submitSearchFilters('#query_form'); 
  // });
  
  $('#select_all a').live('click',function(){
    $('#sidebar label').removeClass('active');
    $('#sidebar input[type=checkbox]').attr('checked', false); 
    submitSearchFilters('#query_form');
    return false;
  });
  
  $('.filteritem a.select_all').click(function(){
    var parentBlock = $(this).parents('.block');
    var filters = $(parentBlock).find('.filteritem');
    filters.each(function(){
      $(this).find('input').attr('checked', 'checked');
      $(this).find('label').addClass('active');
    });
    submitSearchFilters('#query_form');
    return false;
  });
  
  $('.filteritem a.de_select_all').click(function(){
    var parentBlock = $(this).parents('.block');
    var filters = $(parentBlock).find('.filteritem');
    filters.each(function(){
      $(this).find('input').attr('checked', '');
      $(this).find('label').removeClass('active');
    });
    submitSearchFilters('#query_form');
    return false;
  });

  $('#meta_content a#select_all').live('click',function(){
    $('#meta_cantons input[type=checkbox]').attr('checked', true);
    return false;
  });

  $('#meta_content a#deselect_all').live('click',function(){
    $('#meta_cantons input[type=checkbox]').attr('checked', false);
    return false;
  });

  // Show/hide additional organization fields in ip context
  $('input#organization_ventures_attributes_0_is_responsible').live('change',function(){
    if($(this).attr('checked')) {
      $('#table_form_fields_responsible').show();
    }
    else {
      $('#table_form_fields_responsible').hide();
    }
  });

  // Active Indicator for TabNav
  //$('.tab_nav a').click(function(){
  //  $('.tab_nav li').removeClass('active');
  //  $(this).parent('li').addClass('active');
  //});
  
  // Submits ajax form for the map/list views
  $('a.map_form').live('click', function(){
    var url = $(this).attr('href'); 
    var form = $('#query_form');
    form.attr('action', url); 
    form.ajaxSubmit({ 
      target: '#tabbed_content',
      global: true
    });
    return false; 
  }); 

  $('a#show_all').click(function(){
    $('.filteritem').each(function(){
      console.log($(this).attr('id'));
      $(this).find('input').attr('checked', '');   
      $(this).find('label').removeClass('active');
    });
    submitSearchFilters('#query_form');
     var form = $('#query_form');
     var listType = $('ul.tab_nav li.current').attr('id').split('_')[0];   
     var url = form.attr('action').split('?')[0] + '?view=' + listType;
     form.attr('action', url);
     form.ajaxSubmit({ 
       target: '#tabbed_content',
       global: false 
     });
    return false;
  });

  $('#expand_groups').click(function() {   
    expand_collapse('show');   
    return false;
  });
  
  $('#collapse_groups').click(function() {  
    expand_collapse('hide'); 
    return false; 
  });

  $('#expand_list').click(function() {
    expand_collapse_list('show');
    return false;
  });

  $('#collapse_list').click(function() {
    expand_collapse_list('hide');
    return false;
  });

  // Tabs
  navTabs();

  // Tabs (related content)
  $('#tabbed_related_content div.module:not(:first)').hide();
  $('#tabs_related li:first').addClass('current');
  
  $('#tabs_related li').click(function(e) {
    $('#tabbed_related_content div.module').hide();
    $('#tabs_related .current').removeClass("current");
    $(this).addClass('current');
    
    var clicked = $(this).find('a:first').attr('href');
    $('#tabbed_related_content ' + clicked).fadeIn('fast');
    e.preventDefault();
  }).eq(0).addClass('current');

  // jQuery UI datepicker
  $.datepicker.setDefaults($.extend({
      showMonthAfterYear: false,
      changeMonth: true, 
      changeYear: true,
      showButtonPanel: true
  }, $.datepicker.regional['']));
  
  // jQuery UI slider
  var slider =  $('#country_range_select');
  if(slider.length > 0){
    $(slider).selectToUISlider({
      labels: 0,
      labelSrc: 'text',
      sliderOptions: { change: function(){
        submitSearchFilters('#query_form');
      }}
    }).hide(); 
  }  
  
  //$('#nav_breadcrumbs ul > li').each(function(){
  //  if(!$(this).is(':last-child')){
  //    $(this).after('<li class="divider">|</li>');
  //  }
  //});
  
  // Behaviours for sidebar blocks on the portal page
  //$('.portal_block').each(function(){
  //  var cookieName = this.id;
  //  var showGroup = $.cookie(cookieName);
  //  if(showGroup == 'hide'){
  //    $(this).find('.block_group').hide();
  //  }
  //}).click(function(e){
  //  var group = $(this).find('.block_group');
  //  cookieName = this.id;
  //  cookieValue = group.is(':visible') ? 'hide' : 'show';
  //  $.cookie(cookieName, cookieValue, { path: '/'});
  //  var trigger = e.target
  //  if(trigger.tagName == 'H4'){
  //    group.toggle('blind', 200);
  //  }
  //}).find('p').css({'cursor':'pointer'});
  //
  //$('#show_all_blocks').live('click', function(){
  //  $('.portal_block').each(function(){
  //    var cookieName = this.id;
  //    $.cookie(cookieName, 'show', { path: '/'});
  //    $('.block_group', this).show();
  //  });
  //});
  //
  //$('#hide_all_blocks').live('click', function(){
  //  $('.portal_block').each(function(){
  //    var cookieName = this.id;
  //    $.cookie(cookieName, 'hide', { path: '/'});
  //    $('.block_group', this).hide();
  //  });
  //});
  
  $('#measure_colour').live('click', function(){
    $('#colorwrapper').fadeIn('slow');
  });
  
  $('#close_colorpicker').live('click', function(){
    $('#colorwrapper').fadeOut('slow');
    return false;
  });
  
  // Rounded borders for IE
  if(jQuery.browser.msie && jQuery.browser.version != '6.0'){
    $('.text').corner('6px');
    $('.link_tab').corner('10px left cc:#fff');
    $('.content_module').corner('10px right cc:#fff');
    $('.box').corner('6px round cc:#fff');
    $('.border').corner('round 5px bottom'); 
  }  
  
  if(jQuery.browser.msie && jQuery.browser.version == '6.0'){
    sfHover();
  }
  
  if($('#tag_list_display').length > 0 && $('.state').length > 0){  
    $('#tag_list_display').append('|')
  }

  // This needs to be last
  // Adjusts the heights to be the same
  getHeights();      

});

function update_item_status(prj_id, desc_id, cat_id, item_id) {
  var status = $('#item_' + item_id).checked;
  var url =  '/projects/' + prj_id + '/descriptions/' + desc_id + '/item_categories/' + cat_id;
  url +=  '/items/' + item_id + '/update_status&status=' + status ;
  $.ajax({
    type: "PUT",
    url: url
  });
}

function after_update(){
  $('.draglist').each(function(){ 
    var items = $(this).find(".position");
    var cnt = 1;
    items.each(function(){
      $(this).html('<td class="position">' + cnt + '</td>');
      cnt += 1;
    })
  });
} 

function expand_collapse(action){
  var menus = $('#sidebar_nav .block').each(function(block){
    var group = $(this).find('.menugroup');
    var groupName = "qe_" + $(this).attr('id');
    if(action == 'hide'){
      $.cookie(groupName, "hide", { path: '/' });
      if(group.is(':visible')){
        group.hide('blind', 200); ;
      }
    }else{
      $.cookie(groupName, null, { path: '/' });
      if(group.is(':hidden')){
        group.show('blind', 200);
      }
    }
  });
}

function expand_collapse_list(action){
  var projects = $('#main_content .project').each(function(block){
    var list = $(this).find('.module_content');
    var listName = "ip_" + $(this).attr('id');
    if(action == 'hide'){
      $.cookie(listName, "hide", { path: '/' });
      if(list.is(':visible')){
        list.hide('blind', 200); ;
      }
    }else{
      $.cookie(listName, null, { path: '/' });
      if(list.is(':hidden')){
        list.show('blind', 200);
      }
    }
  });
}

// Diagnostic alert to show what is being submitted
function showRequest(formData, jqForm, options) { 
  var queryString = $.param(formData); 
  alert('About to submit: \n\n' + queryString); 
  return true; 
} 

// Submit Search filters
function submitSearchFilters(form){
  var form = $(form);
  var url = form.attr('action');
  form.attr('action', url);  
  form.ajaxSubmit({ 
    target: '#main_content',
    global: false,
    success: function(){
      $('#tabbed_content div.module').hide(); 
      getHeights();
      var current_tab = $('#tabs li.current a').attr('href'); 
      $(current_tab).show(); 
    }
  });
}

// COMMENT: There isn't always a list or map present
//function submitSearchFilters(form){
//  if(($('#map').length > 0) && ($('#map').length > 0)){
//    var listType = $('ul.tab_nav li.active').attr('id').split('_')[0] || 'list';
//    var form = $(form);
//    var url = form.attr('action').split('?')[0] + '?view=' + listType;
//    form.attr('action', url);  
//    form.ajaxSubmit({ 
//      target: '#main_content',
//      global: false 
//    });
//  }
//}


function setUpColorPicker(){
  var colorInput = $('#measure_colour');
  if($(colorInput).length > 0){
    var defaultColor = $('#measure_colour').attr('value');
    colorValue = defaultColor == '' ? '#ffff0f' : defaultColor;
    $('#measure_colour').attr('value', colorValue);
    $('#colorpicker').farbtastic(colorInput);
  }
}

function getHeights(){
  var boxes = $('.border');
  var idealHeight = 0;
  if($('#content').length > 0){
    boxes.each(function(){
      var thisHeight= $(this).height();
      if(thisHeight > idealHeight){
        idealHeight = thisHeight;
      }
    });
    boxes.css({'min-height':idealHeight + 'px'});       
    // boxes.height(idealHeight);
    $('#display_map').height(idealHeight - 37 + 'px');    
  }
} 

function sfHover() { 
  var sfEls = document.getElementById("main_nav").getElementsByTagName("LI");
  for (var i=0; i<sfEls.length; i++) {
    sfEls[i].onmouseover=function() {
      this.className+=" sfhover"; 
    }
    sfEls[i].onmouseout=function() {
      this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
    }
  }
}       

function navTabs(){
  $('#tabbed_content div.module:not(:first)').hide();
  $('#tabs li:first').addClass('current');
  
  $('#tabs li').click(function(e) {
    $('#tabbed_content div.module').hide();
    $('#tabs .current').removeClass("current");
    $(this).addClass('current');
    
    var clicked = $(this).find('a:first').attr('href');
    $('#tabbed_content ' + clicked).fadeIn('fast');
    e.preventDefault();
  }).eq(0).addClass('current');
}

$.fn.sortableGrid = function(url) {
  $(this).sortable({
    handle: 'td.grabber a',
    items: 'tr',
    containment: 'parent',
    axis: 'y',
    opacity: 0.8,
    cursor: 'crosshair',
    tolerance: 'pointer',
    update: function() {
      setupGridStyles();
      var ids = [];
      $(this).find('tr').each(function() {
        var id = $(this).attr('id').split('_')[1];
        ids.push(id);
      });
      $.post(url, {departments: ids.join(',')});
    }
  });
}
function setupGridStyles() {
  // alternating grid row
  $('table.grid')
    .find('tr:odd').addClass('alternate').end()
    .find('tr:even').removeClass('alternate').end();
}

$(function() {
    setupGridStyles();

    // progress
    $('#progress').ajaxStart(function() {
      $(this).show();
    }).ajaxComplete(function() {
      $(this).hide();
    });

    $('table.draglist')
      .find('td:not(.actions, .grabber)').click(function() {
        var href = $(this).parent().find('a.edit').attr('href');
        window.location = href;
      }).end()
      .find('a.destroy').each(function() {
        var link = $(this);
        var href = link.attr('href') + '.js';
        link.attr('href', '#delete'); // remove href

        link.click(function() {
          if (!confirm("Are you sure you want to remove this row?"))
            return;

          $.post(href, {_method: 'DELETE'}, function() {
            link.parents('tr').remove(); // remove row
            setupGridStyles();
          })
        });
      }).end();
});

