// Calandar stuff
// $Id: jquery.manheim.calendar.js,v 1.9 2010-07-06 21:57:22 mibbotso Exp $
// legacy
function Set_Displayed_Sale_Count(n) { jQuery('#cal_sale_count').html(n); }
//legacy
function Calendar_Crit_Click(accord,tabName,cb) { jQuery.manheimCalendar.cbClick(accord,tabName,cb); }

// man this gets ugly
// find a string in a string
function strstr (haystack, needle, bool) {
    var pos = 0;
    
    haystack += '';
    pos = haystack.indexOf( needle );
    if (pos == -1) { return false; } 
	else{
        if (bool){ return haystack.substr( 0, pos ); } 
		else{ return haystack.slice( pos ); }
    }
}
// real ugly
// replace a part of a string with something else
function str_replace (search, replace, subject, count) {
    var i = 0, j = 0, temp = '', repl = '', sl = 0, fl = 0,
            f = [].concat(search),
            r = [].concat(replace),
            s = subject,
            ra = r instanceof Array, sa = s instanceof Array;
    s = [].concat(s);
    if (count) {
        this.window[count] = 0;
    }

    for (i=0, sl=s.length; i < sl; i++) {
        if (s[i] === '') {
            continue;
        }
        for (j=0, fl=f.length; j < fl; j++) {
            temp = s[i]+'';
            repl = ra ? (r[j] !== undefined ? r[j] : '') : r[0];
            s[i] = (temp).split(f[j]).join(repl);
            if (count && s[i] !== temp) { this.window[count] += (temp.length-s[i].length)/f[j].length;}
        }
    }
    return sa ? s : s[0];
}

jQuery.manheimCalendar = {
    links: {
        calsearch_accord_auctioncentres: '/calendar/?rm=populate_tab;tab=auction_name&_=',
        calsearch_accord_vendors: '/calendar/?rm=populate_tab;tab=consignor_name&_=',
        calsearch_accord_vtypes: '/calendar/?rm=populate_tab;tab=vehicle_type_desc&_=',
        calsearch_accord_schannel: '/calendar/?rm=populate_tab;tab=sale_variant&_='
    },
    
    modLinks: {
    	auction_name: '/calendar/?rm=populate_tab;tab=auction_name&_=',
		consignor_name: '/calendar/?rm=populate_tab;tab=consignor_name&_=',
		vehicle_type_desc: '/calendar/?rm=populate_tab;tab=vehicle_type_desc&_=',
		sale_variant: '/calendar/?rm=populate_tab;tab=sale_variant&_=',
		cal_grid: '/calendar/?rm=cal_grid;&_='				
	},
	
	useLinks: {},
	
	auction_name: new Array(),
	consignor_name: new Array(),
	vehicle_type_desc: new Array(),
	sale_variant: new Array(),
	inUse: new Array(),
	
	in_array: function(string, array) {
	   for (i = 0; i < array.length; i++) { if(array[i] == string)   { return true; } }
	   return false;
	},
	
	initialize: function() {
		var clicked = '';
		var img = '';
		
		jQuery("#calsearch_accord_div").accordion({ active: false, autoHeight: false, collapsible: true });
		
		jQuery("#calsearch_accord_div h3").click(function(e) {
		
		    var clicked = $(this).next("div").attr('id');
			
			img = "<a class='remove-button floatright' id='" + clicked + "'></a>"; 
		
		    jQuery('a.remove-button').remove();
			
			var check = jQuery('#' + clicked).find("input:checked").length;
		    
		    if ( check > 0 ) { jQuery('#' + clicked).prepend(img); }
						
			jQuery('a.ad-minus').removeClass('current');
	        jQuery(this).children('a.ad-minus').addClass('current');
	        
	        jQuery(this).children('a.ad-minus').toggleClass('minus-button').toggleClass('add-button');
	        jQuery('a.minus-button:not(.current)').addClass('add-button').removeClass('minus-button');
	        
	    	jQuery(this).children('a.remove-button').toggle();
	    	jQuery(this).blur();
	    	
	    		
            jQuery.manheimCalendar.removeAction(this.id);
	    });		
	    
	    
	},
	
	removeAction: function(clicked){
			jQuery('a.remove-button').click(function(e){
	        	var items = new Array();
				
				switch(clicked){
					case 'calsearch_accord_auctioncentres':
					  jQuery.manheimCalendar.auction_name = []; jQuery('#centre').html('');
					break;
					case 'calsearch_accord_vendors':
					  jQuery.manheimCalendar.consignor_name = []; jQuery('#vendor').html('');
					break;
					case 'calsearch_accord_vtypes':
					  jQuery.manheimCalendar.vehicle_type_desc = []; jQuery('#types').html('');
					break;
					case 'calsearch_accord_schannel':
					  jQuery.manheimCalendar.sale_variant.clear = []; jQuery('#channel').html('');
					break;
				}
				
				jQuery('#' + clicked + ' input:checkbox:checked').each(function(index, result) {
					items.push(";" + result.name + "=" + result.value);					
				});
				
				jQuery.each(jQuery.manheimCalendar.useLinks, function(i, val) {
					var link = val;
					jQuery.each(items, function(index, result){ if (strstr(link, result)) { link = str_replace(result, '', link); } });
					jQuery.manheimCalendar.useLinks[i] = link;
				});					
				
				jQuery(this).next('div#calendar_accord').find("input[type='checkbox']").attr( 'checked', '');
				
				jQuery.manheimCalendar.update();
				jQuery.manheimCalendar.rePop();
	        });
	},
	  
	cbClick: function(accord,tabName,cb) {
		// Another ugly one. Cb click adds the vale, click again and remove it.
		// Ugly needs some attention 
		switch(tabName){
			case 'auction_name':
			   if(!this.in_array(cb.value, this.auction_name) ) { this.auction_name.push(cb.value); } 
			   else { this.auction_name.splice(cb.value,1); }
			break;
			case 'consignor_name':
			   if (!this.in_array(cb.value, this.consignor_name)) { this.consignor_name.push(cb.value); } 
			   else { this.consignor_name.splice(cb.value,1); }
			break;
			case 'vehicle_type_desc':
			   if (!this.in_array(cb.value, this.vehicle_type_desc)) { this.vehicle_type_desc.push(cb.value); }
			   else { this.vehicle_type_desc.splice(cb.value,1); }
			break;
			case 'sale_variant':
			   if (!this.in_array(cb.value, this.sale_variant)) { this.sale_variant.push(cb.value);}
			   else { this.sale_variant.splice(cb.value,1); }
			break;
		}
		
		this.update();
		this.rePop();
	},
	
	/*
	 * If anyone can do this in a 1 liner the beers on me! ;-)
	 */
	update: function() {
		var links     = this.modLinks;
		var checked   = [];
		var unchecked = [];
		// get all checked 	
		jQuery('input:checkbox:checked').each(function(index, result){  checked.push(";" + result.name + "=" + result.value); });
		// get all unchecked
		jQuery(":input:not(:checked)").each(function(index, result) { unchecked.push(";" + result.name + "=" + result.value); });
		// remove all references to unchecked from links
		jQuery.each(links, function(i, val) {
			jQuery.each(unchecked, function(index, result){
				if (result != ';tab=') {
					if (strstr(links[i], result)) {
						links[i] = str_replace(result, '', links[i]);
					}
				}
			});
		});
		// and re-build the links 
		jQuery.each(links, function(i, val) {
			 jQuery.each(checked, function(index, result){  val += result;  });
			 links[i] = val;
		});
		this.useLinks = links;
	},
	
	rePop: function() {
		// populate using new link data
		
		var string = '';
		
		jQuery.each(this.useLinks, function(i, val) {
		   switch(i) {
	          case 'auction_name':
	            jQuery.get(val, function(data) { 
					jQuery('#calsearch_accord_auctioncentres').html(data);
					jQuery.manheimCalendar.updateTitileBar('calsearch_accord_auctioncentres', 'centre');
				});
	          break;
	          case 'consignor_name':
	            jQuery.get(val, function(data) { 
					jQuery('#calsearch_accord_vendors').html(data);
					jQuery.manheimCalendar.updateTitileBar('calsearch_accord_vendors', 'vendor');					
				});
	          break;
	          case 'vehicle_type_desc':
	            jQuery.get(val, function(data) { 
					jQuery('#calsearch_accord_vtypes').html(data);
					jQuery.manheimCalendar.updateTitileBar('calsearch_accord_vtypes', 'types');	
				});
	          break;
	          case 'sale_variant':
	            jQuery.get(val, function(data) { 
					jQuery('#calsearch_accord_schannel').html(data); 
					jQuery.manheimCalendar.updateTitileBar('calsearch_accord_schannel', 'channel');	
				});
	          break;
	          default:
	       }			       
		});
		
		jQuery.get(this.modLinks['cal_grid'], function(data){
			jQuery('#sales_cal_grid').html(data);
            jQuery.manheimUtils.doCalendar();
		});
	},
	
	prePop: function() {
		jQuery.each(this.links, function(i, val){ jQuery.get(val, function(data){ jQuery('#'+i).html(data); }); });
	},
	
	updateTitileBar: function(id, target){
		var string = '';
		jQuery('#' + id + ' input:checkbox:checked').each(function(index, result){ if(result) string += result.value + ', ';}); 
		jQuery('#' + target).html(string);
		
		var img = "<a class='remove-button floatright' id='" + id + "'></a>"; 
		var check = jQuery('#' + id).find("input:checked").length;
		if ( check > 0 ) { jQuery('#' + id).prepend(img); }
		
		this.removeAction(id);
	}
}

