// ====================
// = Global Variables =
// ====================
var dataTable;
var dataTableLength;
var features = new Array();
var keywords = {
  keyword:{name:'keyword', group:'keywords'}, 
  ktitle:{name:'title', group:'keywords'}, 
  kcomp:{name:'composer', group:'keywords'}, 
  klyrics:{name:'lyrics', group:'lyrics'}
};
var songs_xml;
var projects_xml;
var current_user;
var current_song;
var current_track;
var error_message = "We are sorry but something went wrong.";
var timely_tracks;

// URLs
var menugen_url = "/importTest/menugenWizard.php";
var sendback_url = "/importTest/sendbackwizard.php";



// =============
// = Functions =
// =============
function expose(item){
  item.expose({color:"#000", onBeforeClose: function(){reset_nav()}});
}

function hide_columns(array){
  for (var i=0; i < dataTableLength; i++) {
    if(array.includes(i.toString())){hide_column(i)}else{show_column(i)};
  };
}

function hide_column(iCol){
  var hidden_columns = $.cookie('hidden_columns').split(',');
  var set_col = false;
  if(hidden_columns.does_not_include(iCol)){hidden_columns.push(iCol);};
  $('#search_col_filter a.show_hide[rel=' + iCol + ']:first').removeClass('show_hide_on');
  set_column(iCol, set_col, hidden_columns);
}

function show_column(iCol){
  var hidden_columns = $.cookie('hidden_columns').split(',');
  var set_col = true;
  hidden_columns = hidden_columns.reject(iCol);
  $('#search_col_filter a.show_hide[rel=' + iCol + ']:first').addClass('show_hide_on')
  set_column(iCol, set_col, hidden_columns);
}

function set_column(iCol, set_col, hidden_columns){  
  dataTable.fnSetColumnVis( parseInt(iCol), set_col );
  $.cookie('hidden_columns', hidden_columns);
}

function fnShowHide( iCol ){
  if($.cookie('hidden_columns')){}else{$.cookie('hidden_columns', [])};
	var hidden_columns = $.cookie('hidden_columns').split(',');
	var bVis = dataTable.fnSettings().aoColumns[iCol].bVisible;
	bVis ? hide_column(iCol) : show_column(iCol);
	tooltipper();
}

function no_search_params(){
  return keywords_length() == 0 && features.length == 0;
}

function keywords_length(){
  var count = 0;
  $.each(keywords, function(k,v){
    if(v.value != null && v.value != ''){count += 1}
  });
  return count;
}

function parse_attributes(attributes_string){
  var attributes = {};
  
  $.each(attributes_string.split(':'), function(k, v){
    var key_val = this.split('=');
    attributes[key_val[0]] = key_val[1];
  });
  return attributes;
}

function standardize_url_options(options){
  options['len'] = 0;
  options['UserLabel'] = 'guest';
  return options;
}

function loading_table(text){
  if(text){}else{text = ''}
  dataTable.fnClearTable();
  dataTable.find('td:first').text(text);
}

function toggle_siblings(item, options){
  var options = options || {fade:true};
  if(item.css('display') == 'none'){
    if(options['fade']){
      item.siblings().each(function(){
        if($(this).css('display') != 'none'){
          $(this).fadeOut(function(){item.fadeIn()});
        }
      });
    }else{
      item.siblings().hide();
      $(this).show();
    }
  }
  return item;
}

// Search
function add_feature(item, text){
	$.mask.close();
	
  if(features.toString().match(item.attr('rel'))){
    alert('already added!');
    return false;
  }else{
    var rel = item.attr('rel');
    features.push(rel);
    append_feature(item, text);
    search_results.main_search();
    return true;
  };
};

function append_feature(item, text){
	$.mask.close();
	
  var rel = item.attr('rel');
	item.parents('li.toplevel:first').after('<li class="selected_feature" rel="' + rel + '">- ' + text + '</li>');
}

function remove_feature(item){
	var rel = item.attr('rel');
	var array = features;
	features = new Array;
	item.remove();
	
	for(i = 0; i < array.length; i = i + 1){
		if(!array[i].match(rel)){
			features.push(array[i]);
		}
	}
	search_results.main_search();
};

function search_reset(){
	table_reset();
	// remove features
	features = new Array();
	$('.main_options_nav li.selected_feature').remove();
	
	// remove keywords
	$.each(keywords, function(k, v){
	  v['value'] = null;
	});
	$('.main_options_nav li.selected_keyword').remove();
	
}

function table_reset(){
	dataTable.fnClearTable();
};

function get_user_id(){
  if($.cookie('loggin')){
    return $.cookie('loggin');
  }else{
    return '-1';
  }
}

function tooltipper(){
	$("tr span[title]").tooltip({
		predelay: 400,
		opacity: 0.9, effect: "fade", offset: [-5,0]	});	
}

function set_results_table(){
	
  var song_array = new Array();
  var i = 0;
  $(songs_xml).find('song').each(function(){
    var song = new Song($(this));
    loading_cursor('hide');

    song_array[i] = [
      "<span class='wrapper' title='" + (song.title.apostrophe_escape() || '-') + "'><span class='col_song' rel='" + song.id + "'>" + song.stitle + "</span></span>",
      "<span class='wrapper' title='" + (song.genre.apostrophe_escape() || '-') + "'><span class='col_desc'>" + song.genre + "</span></span>",
      "<span class='wrapper' title='" + (song.mood.apostrophe_escape() || '-') + "'><span class='col_desc'>" + song.mood + "</span></span>",
      "<span class='wrapper' ><span class='col_desc'>" + song.duration + "</span></span>",
      "<span class='wrapper' title='" + (song.library.apostrophe_escape() || '-') + "'><span class='col_desc'>" + song.library + "</span></span>",
      "<span class='wrapper' title='" + (song.composers.apostrophe_escape() || '-') + "'><span class='col_desc'>" + song.composers + "</span></span>",
      "<span class='wrapper' title='" + (song.desc.apostrophe_escape() || '-') + "'><span class='col_desc'>" + song.desc + "</span></span>",
      "<span class='wrapper' title='" + (song.cdtitlelong.apostrophe_escape() || '-') + "'><span class='col_cd'>" + song.cdtitlelong + "</span></span>",
      "<span class='wrapper' ><span class='col_cd'>" + song.release_date.apostrophe_escape() + "</span></span>"
    ];
    i = i + 1;
  });
  dataTable.fnClearTable();
  if(song_array.length > 0){
    dataTable.fnAddData(song_array);
    if($.cookie('hidden_columns')){
      hide_columns($.cookie('hidden_columns').split(","));
    }
  };
	tooltipper();
	
	// this disables text highliting on double click.
  $('#search_results tr').disableSelect();
}


function zebra(item){
  var toggle = 'even';
  item.children().each(function(){
    $(this).removeClass('even');
    $(this).removeClass('odd');
    if(toggle == 'even'){toggle = 'odd'}else{toggle = 'even'}
    $(this).addClass(toggle);
  })
}

function clear_project(){$('#projects .tracks .current_project').html('')}

function download_track_url(cdnum, trknum){
  return "http://musicboxmx.com/serverMP3/download.php?action=downloadGSUBTYPE&cdnum=" + cdnum + "&track=" + trknum + "&CID=1109"
}

function download_cd_url(cdnum){
  return "http://musicboxmx.com/update/getFile.php?File=GSUBTYPELOWER%2F" + cdnum + "%5FGSUBTYPE%2Ezip&CID=%2D1"
}

// ==================
// = Document Ready =
// ==================
$(function() {
	
	dataTableLength = $('.dataTable thead tr:first th').length;
  dataTable = $('.dataTable').dataTable({
    "bAutoWidth": false,
    "bSort": false,
    "bFilter": false,
    "bPaginate":false
  });
  jPlayer_init();
  $('#jquery_jplayer').data("jPlayer.config").cssDisplay.pause = 'inline-block';
  
  get_menues();
  
  // ================
  // = Most Recent =
  // ================
  $('.most_recent').click(function(){
    search_results.order = "Wsongs.addedDate DESC";
    search_results.search();
    // dataTable.fnSort([[$(this).attr('rel'), 'desc'], [0, 'asc']]);
  });
  
  // ================
  // = Search Reset =
  // ================
  $('#search_reset .back_to_results').hide();
  $('#search_reset .back_to_results').click(function(){
    search_results.main_search();
  });
  
  // ====================
  // = Show Hide Column =
  // ====================
  if($.cookie('hidden_columns')){}else{$.cookie('hidden_columns', [1,2,3,4,5,8,9,10,11])}
  $('#search_col_filter a.show_hide').click(function(){
    fnShowHide($(this).attr('rel'));
  })

	// ========================
	// = Instrumentals Filter =
	// ========================
  $('input[name=songs_and_instrumentals]').click(function(){
    if($('input[name=songs_and_instrumentals]:checked').val() == 'instrumentals'){
      $('#songhider').height($('#song_options_nav').height() + 4);
      $('#songhider').show();
    }else{
      $('#songhider').hide();
    }
    search_results.main_search();
  })

	// ===================
	// = Initial Search? =
	// ===================
	var querystring = $.deparam.querystring();
	if(querystring.cd){
	  search_results.search_cd(querystring.cd);
	}else if(querystring.keyword){
	  keywords.keyword.value = querystring.keyword;
	  search_results.main_search();
	}else if(querystring.wizard){
	  toggle_siblings($('.search_results:first'))
	  search_results.search_individual('Wizard:' + querystring.wizard, {uri:'/importTest/sendbackwizard.php'});
    
	}

  //==========================
  //= Expose the Nav onClick =
  //==========================
 
  // assign a click event to the exposed element, using normal jQuery coding
  $(".main_options_nav li a, #browse li a").click(function() {
    // perform exposing for the clicked element
    if(!$(this).hasClass('skip-expose')){
      $(".expose").expose({color:"#000", onBeforeClose: function(){reset_nav()}});
    }
  });
  $('a.projects_flyout').click(function(){
    $(".projects").expose({color:"#000", onBeforeClose: function(){reset_nav()}});
  });

  // assign a click event to the exposed element, using normal jQuery coding
  $(".add_feature").live("click", function() {
    // perform exposing for the clicked element
    $.mask.close();
  });

  // =========================
  // = Toggle Center Content =
  // =========================
  $('a.new_releases_button').click(function(){
    toggle_siblings($('#center .new_releases_and_timely_tracks:first'))
    search_results.toggle_back_to_results();
  });
  
  $('a.whoareyou').click(function(){
    toggle_siblings($('#center .whoareyou:first'))
    search_results.toggle_back_to_results();
    $.mask.close();
  });
  
  // ====================
  // = Flyout Extension =
  // ====================
  $('.main_options_nav > li, .flyout > li').click(function(){
    if($(this).hasClass('active')){}else{reset_nav()}
  });
  
  // ==================================
  // = New Releases and Timely Tracks =
  // ==================================
  // New Releases
  $.ajax({
    url: "/importTest/menugen.php?UserLabel=guest&area=CDs", 
    dataType: 'text/xml',
    beforeSend: function(){$('.new_releases ul').html('<li><img src="images/loading.gif"/></li>')},
    success: function(xml){
      new_releases = $(xml).find('i');
      var ul = $('.new_releases ul');
      ul.html('');
      new_releases.each(function(){
        ul.append(
          '<li class="show_cd" rel="' + $(this).attr('id') + 
          '"><div class="pad clear"><div class="text block clear"><img src="http://musicboxmx.com/live/covers_small/' + 
          $(this).attr('id') + 
          '.jpg"/><div class="name"">' + 
          $(this).attr('name') + 
          '</div><div class="description">' + $(this).attr('desc') + '</div><div class="clear"></div></div></div></li>'
        );
      });
    },
    error: function(){alert('New releases fail!')}
  });
  
  // Timely Tracks
  $.ajax({
    url: "/import/featured.php?UserLabel=guest", 
    dataType: 'xml',
    beforeSend: function(){$('.timely_tracks ul').html('<li><img src="images/loading.gif"/></li>')},
    success: function(xml){
      timely_tracks = $(xml);
      var ul = $('.timely_tracks ul');
      ul.html('');
      timely_tracks.find('song').each(function(){
        var song = new Song($(this));
        ul.append('<li id="' + song.id + '_timely_track">' + song.title + '</li>');
      });
    },
    error: function(){/*alert('Timely tracks fail!')*/}
  });
  
  // Play timely track
  $('.timely_tracks ul li').live('click', function(){
    $(this).siblings().removeClass('active');
    $(this).addClass('active');
    var SID = parseInt($(this).attr('id'));
    var song = new Song(timely_tracks.find('song[id=' + SID + ']'));
    jplay_song(song);
  });
  
  // ===========
  // = Show CD =
  // ===========
  $('#artwork').dblclick(function(){
    search_results.search_cd();
  });
  
  $('.show_cd, .new_releases .show_cd').live('click', function(){
    search_results.search_cd($(this).attr('rel'));
  });
  
  
  $('.main_options_nav li.keywords form, .main_options_nav li.lyrics').submit(function(){
    var textfield = $(this).find('input[type=text]:first');
    
    keywords[textfield.attr('name')]['value'] = textfield.val();
    $('.main_options_nav .selected_keyword').remove();
    $.each(keywords, function(k, v){
      if(v['value']){
        var rel = k;
        var text = v['name'] + ': ' + v['value'];
        $('.main_options_nav > li.' + v.group).after('<li class="selected_keyword" rel="' + rel + '">- ' + text + '</li>');
      }
    });
    $(this).find('input').val('');
    $(this).find('input').blur();
    reset_nav();
    search_results.main_search();
    return false;
  })
  
  // FEATURES
  $('.main_options_nav li a.add_feature, ul.flyout li a.add_feature').live('click', function(){
    var success = add_feature($(this), $(this).text());
  	if(success){reset_nav()}
  	return false;
  });
  
  // ==================
  // = Remove Feature =
  // ==================
  $('.main_options_nav li.selected_keyword').live('click', function(){
    keywords[$(this).attr('rel')]['value'] = null;
    $(this).remove();
    search_results.main_search();
  });
  
  $('.main_options_nav li.selected_feature').live('click', function(){
    remove_feature($(this));
  });
  
  // ===========
  // = Overlay =
  // ===========
  $('.overlay[rel]').overlay({
    mask: {
      color: '#000000',
      loadSpeed: 200,
      opacity: 0.9
    },
    onLoad:function(item){
      inputs = $(this.getTrigger().attr('rel')).find('input[type=text]');
      if(inputs.length != 0){inputs[0].focus()}
    }
  });
  login_overlay = $('#login .login').overlay({
    oneInstance:false,
    api:true,
    mask: {
      color: '#000000',
      loadSpeed: 200,
      opacity: 0.9
    },
    onLoad:function(item){
      inputs = $(this.getTrigger().attr('rel')).find('input[type=text]');
      if(inputs.length != 0){inputs[0].focus()}
    }
  });
  edit_project_overlay = $('#edit_project').overlay({
    oneInstance:false,
    api:true,
    mask: {
      color: '#000000',
      loadSpeed: 200,
      opacity: 0.9
    },
    onLoad:function(item){
      inputs = $(this.getTrigger().attr('rel')).find('input[type=text]');
      if(inputs.length != 0){inputs[0].focus()}
    }
  });
  duplicate_project_overlay = $('#duplicate_project').overlay({
    oneInstance:false,
    api:true,
    mask: {
      color: '#000000',
      loadSpeed: 200,
      opacity: 0.9
    },
    onLoad:function(item){
      inputs = $(this.getTrigger().attr('rel')).find('input[type=text]');
      if(inputs.length != 0){inputs[0].focus()}
    }
  });
  loading_overlay = $('#loading').overlay({
    oneInstance: false, 
    api: true, 
    mask: {
      color: '#000000',
      loadSpeed: 200,
      opacity: 0.9
    },
    closeOnClick: false
  });
  new_project_overlay = $('#projects .new_project').overlay({
    oneInstance: false, 
    api: true,
    mask: {
      color: '#000000',
      loadSpeed: 200,
      opacity: 0.9
    }
  });
  download_overlay = $('#download_format').overlay({
    oneInstance: false, 
    api: true,
    mask: {
      color: '#000000',
      loadSpeed: 200,
      opacity: 0.9
    }
  });
  download_project_overlay = $('#download_project_format').overlay({
    oneInstance: false, 
    api: true,
    mask: {
      color: '#000000',
      loadSpeed: 200,
      opacity: 0.9
    }
  });
  select_project_overlay = $('#select_project').overlay({
    oneInstance: false, 
    api: true,
    mask: {
      color: '#000000',
      loadSpeed: 200,
      opacity: 0.9
    }
    });
    
  download_alert_overlay = $('#download_alert').overlay({
    oneInstance: false, 
    api: true,
    mask: {
      color: '#000000',
      loadSpeed: 200,
      opacity: 0.9
    }
  });

  // ==========
  // = Popups =
  // ==========
  $('a.open').click(function(){
    window.open($(this).attr('href'), "help", "status=1, width=800px, scrollbars=1")
    return false;
  });

});


function clearSelection() {
  var sel ;
  if(document.selection && document.selection.empty){
    document.selection.empty() ;
  } else if(window.getSelection) {
    sel=window.getSelection();
    if(sel && sel.removeAllRanges)
      sel.removeAllRanges() ;
  }
}

$('td').click(clearSelection);
$('a').click(clearSelection);
