jQuery.noConflict();

document.observe('dom:loaded', function() {
  var searchResults = $('clipSearchResults');
  var searchResultsPaginationTop = $('searchResultsPaginationTop');
  var searchResultsPaginationBottom = $('searchResultsPaginationBottom');
  if (searchResults && searchResultsPaginationTop && searchResultsPaginationBottom) {
    var results = new SearchResultList(searchResults);
    var paginationTop = new SearchResultListPagination(searchResultsPaginationTop, results, null);
    var paginationBottom = new SearchResultListPagination(searchResultsPaginationBottom, results, paginationTop);
		
		// periodically check
		jQuery(function($) {
			$("#clip_results").at_intervals(function(){
				num = results.items().length;
		    if (results.clips_num_prev != num) {
		      results.clips_num_prev = num;
		      results.clips_hide_cnt = 0;
				}
		    else if (results.clips_hide_cnt != -1) {
		      results.clips_hide_cnt += 1;
					// console.log("interval... clips: "+num+" hide_cnt: " + results.clips_hide_cnt)
		      if (results.clips_hide_cnt >= 20) {
						$("#clip_results").hide(); // pause interval
						$("#edit_left_search_loader").hide();
						$("#clip_check").hide();
						if (num == 0)	$(".edit_left_search_info").text("Es wurden keine passenden Clips gefunden. Probiere bitte andere Suchbegriffe.");
		        results.clips_hide_cnt = -1;
		      }
				}
		    else if (results.clips_hide_cnt == -1) {
					if (num == 0)	$(".edit_left_search_info").text("Es wurden keine passenden Clips gefunden. Probiere bitte andere Suchbegriffe.");
		    }
			}, { 
				name: "pagination",
				delay: 1500
			});
		});

  }
});

var SearchResultList = Class.create({

  initialize: function(list) {
		this.clips_num_prev = 0;
		this.clips_hide_cnt = 0;
    this.list = $(list);
		//
		this.num_engines = 0;	//
		this.setupAsyncPoller();
    this.onNewData = null;
    this.onNewDataTwin = null;
  },

  items: function() {
    return this.list.select('li');
  },

	setupAsyncPoller: function() {
    url = this.list.readAttribute('pollerUrl');
    job_ids = this.list.readAttribute('jobs');
    if (job_ids) {
      job_ids = job_ids.split(';')
    } else {
      job_ids = []
    }
		this.num_engines = job_ids.length;
    job_ids.each(function(job_id) {
      new PeriodicalExecuter(function(executer) {
        this.poll(executer, url, job_id);
      }.bind(this), 3.5);
    }, this);
  },

  poll: function(executer, url, job_id) {
    executer.failures = executer.failures || 0;
    new Ajax.Updater(
      this.list,
      url,
      {
        parameters:  { job_id: job_id },
        method:      'get',
        evalScripts: true,
        insertion:   'bottom',
        onSuccess:   function() {
					this.num_engines--;
					// console.log("onSuccess - num_engines: "+this.num_engines)
          executer.stop();
          if (this.onNewData) this.onNewData.defer();
					//if (this.onNewDataTwin) this.onNewDataTwin.defer();
					if (this.num_engines <= 0) {
						jQuery("#edit_left_search_loader").hide();
					}
        }.bind(this),
        onFailure: 	 function() {
          if ((executer.failures++) >= 5) {
            executer.stop();
          }
        }
      }
    );
  },

  showWindow: function(start, length) {
    this.items().each(function(item) {
      item.hide();
    });
    this.items().slice(start, parseInt(start) + parseInt(length)).each(function(item) {
      item.show();
			if (item.id) {
				var do_tooltip = true;
				jQuery.each(jQuery.browser, function(i, val) {
					if (i=="msie" && (jQuery.browser.version.substr(0,3) == "6.0" || jQuery.browser.version.substr(0,3) == "7.0")) {
						do_tooltip = false;
					}
				});
				if (do_tooltip) {
					jQuery(".clip_added_"+item.id).tooltip_search({
						bordercolor: '#00112d',
						bgcolor: '#F8F8F8',
						fontcolor: '#666666',
						fontsize: '14px',
						filetype: 'html'
						})
					jQuery("li#"+item.id).removeAttr("id");
				}	
			}
    });
  }
});

var SearchResultListPagination = Class.create({
  
	initialize: function(container, resultList, twin) {
    this.container  = $(container);
    this.resultList = resultList;
    this.currentPage = 1;
    this.perPage = jQuery("#searchResultsPerPage").html();
		this.twin = twin;
		this.setupScrolling();
		if (twin != null) {
			this.resultList.onNewData = this.setupScrolling.bind(this);
		  this.twin.setTwin(this);
		}
	},

  setTwin: function(twin) {
		this.twin = twin;
		this.resultList.onNewDataTwin = this.setupScrolling.bind(this);
	},

	setupScrolling: function() {
		if (this.twin != null) {  // show results only once
			this.showResults(this.currentPage-1);
			this.twin.printPagination();
		}	
    this.printPagination();
  },

  showResults: function(index) {
    this.resultList.showWindow(index * this.perPage, this.perPage);
  },

  // callback function for jQuery pagination
	paginationClick: function(new_page_index, pagination_container) {
		this.currentPage = new_page_index+1;
		if (this.twin) {
		 	this.twin.currentPage = this.currentPage;
		}	
		this.setupScrolling();
    return false;
	},
		
  printPagination: function() {
    this.container.update('');

		// var num = $('edit_left_clips_num_index');
		// console.log("printPagination: " + this.currentPage + " num: " + num.innerHTML + " list-items: "+ this.resultList.items().length)

		var num = this.resultList.items().length;
		var current = this.currentPage;
		var items_per_page = this.perPage;
		var fn = this; // Clipflakes: pagination calls paginationClick!
		var id = this.container.readAttribute('id');
		jQuery(function($) {
			$('#edit_left_clips_num_index').text(num);
			$('#'+id+'').pagination(num, { 
				current_page: current-1,
				items_per_page: items_per_page,
				num_edge_entries: 2,
				prev_text: "&laquo;",
				next_text: "&raquo;",
				prev_show_always: false,
				next_show_always: false,
				callback: fn
		  });
		});
  }

});

function openJSWindow(parent, contentUrl, options) {
  options = options || {};
  var jsWindow = $('jsWindow');
  new Ajax.Updater(
    jsWindow,
    contentUrl,
    options
  );
  jsWindow.clonePosition(parent, { setWidth: false, setHeight: false });
  jsWindow.show();
}

jQuery(function($) {
  var countdown = $('#countdown');
  var allowed = parseInt(countdown.text());
  $('#text').keydown(function() {
    var length = $(this).val().length;
    countdown.text(allowed - length);
    
    if (length == 0) {
      $('#in_reply_to_status_id').val('');
      var label = $('label[for=text]')
      label.text(label.data('original_text'));
    }
  });
  
  $('a.dm').click(function() {
    window.scrollTo(0, 0);
    $('#text').focus().val('d ' + $(this).attr('rel') + ' ');
    return false;
  });
  
  var label = $('label[for=text]')
  label.data('original_text', label.text());
  
  $('a.reply').click(function() {
    window.scrollTo(0, 0);
    var pieces = $(this).attr('rel').split(':');
    var screen_name = pieces[0];
    var id = pieces[1];
    $('#text').focus().val('@' + screen_name + ' ');
    $('#in_reply_to_status_id').val(id);
    $('label[for=text]').text('Replying to ' + screen_name + "'s tweet #" + id);
    return false;
  });

	// thumb
	$("*[class^=thumb_clip_]").tooltip({
		bordercolor: '#00112d',
		bgcolor: 'black',
		fontcolor: 'white',
		fontsize: '11px',
		filetype: 'html',
		framewidth: '164px'
	});
	
	// tipsy
	$("*[class^=tipsy_clipshow_]").tipsy({title: 'cdata', fade: true, gravity: 's'});
	$("*[class^=tipsy_user_]").tipsy({title: 'cdata', fade: true, gravity: 's'});
	$("*[class^=tipsy_category_]").tipsy({title: 'cdata', fade: true, gravity: 'w'});
	$("*[class^=tipsy_playall_]").tipsy({title: 'cdata', fade: true, gravity: 's'});
	$("*[class^=tipsy_edit_]").tipsy({title: 'cdata', fade: false, gravity: 's'});
	$("*[id^=tipsy_query_]").tipsy({title: 'cdata', fade: false, gravity: 's'});
	
	// slider scrollable
	$("#chained").scrollable({circular: true, mousewheel: true}).navigator().autoscroll({
		interval: 8000
	});	

	$("#embed_chained").scrollable({circular: true, mousewheel: true}).navigator().autoscroll({
		interval: 6000
	});	
});

