TableSorter = function(){
	this.table = $('.sortable');
	this.reverse = false;
	var sorters = $('.sorter', this.table);
	sorters.click(this._sort);
	for(var i = 0;i < sorters.length;i++){
		sorters[i].thisObj = this;
	}
}

TableSorter.prototype = {
	_sort : function(){
		var thisObj = this.thisObj;
		$('thead td', this.table).removeAttr('class');
		if(thisObj.reverse){
			$(this).parent('td').attr('class','isActive reversed');
		}else{
			$(this).parent('td').attr('class','isActive');
		}
		var position = $(this).parent('td').prevAll().length;
		var rows = $('tbody tr', thisObj.table);
		var values = new Array();
		for(var i = 0;i < rows.length;i++){
			values.push($('td:eq('+position+')', rows[i]).text());
		}
		var classSplitted = this.className.split(' ');
		if(classSplitted.length > 1){
			values.sort(thisObj.comparators[classSplitted[1]]);
		}else{
			values.sort();
		}
		if(thisObj.reverse){
			values.reverse();
			thisObj.reverse = false;
		}else{
			thisObj.reverse = true;
		}
		$('tbody:eq(0)', thisObj.table).empty();
		//var tds = $('tbody', thisObj.table)
		var sortedDOM = $([]);
		for(var j = 0;j < values.length;j++){
			for(var i = 0;i < rows.length;i++){
				var cellValue = $('td:eq('+position+')', rows[i]).text();
				if(values[j] == cellValue){
					$('tbody', thisObj.table).append(rows[i]);
				}
			}
		}
	},
	
	comparators : {
		numeric : function(x, y){
			return x - y;
		},
		
		currencies : function(x,y){
			return parseFloat(x.split(' ')[0]) - parseFloat(y.split(' ')[0])
		}
	}
}

Basket = function(){
/*	document.cookie = "basket=; expires=-1; path=/"; */
    
    var toBasket = $('.toBasket');
    toBasket.click(this.add);
    var groupToBasket = $('#groupToBasket');
    if (groupToBasket.length > 0) {
        try {
            groupToBasket.click(this.addGroup);
            groupToBasket[0].thisObj = this;
        } catch(e) {}
    }
    var fromBasket = $('.fromBasket'); fromBasket.click(this.remove);
    var fromAll = $('.fromAll'); fromAll.click(this.removeAll);
    var getFile = $('.getFile'); getFile.click(this.getFile);
    
	for(var i = 0;i < toBasket.length;i++){ toBasket[i].thisObj = this; }
    for(var i = 0;i < fromBasket.length;i++){ fromBasket[i].thisObj = this; }
    for(var i = 0;i < fromAll.length;i++){ fromAll[i].thisObj = this; }
    for(var i = 0;i < getFile.length;i++){ getFile[i].thisObj = this; }
    
    this.removeListeners = new Array();
}

Basket.prototype = {
	add : function(){
		var thisObj = this.thisObj;
		var userId = this.className.split(' ')[2];
		var str = thisObj.getIdsFromCookie(userId);
		var id = this.className.split(' ')[1];
		str = str == undefined ? '' : str ;
		Utils.debug(str);
		if(str != ''){
			str += ('|' + id);
		}else{
			str += id;
		}
		Utils.debug(str);
		thisObj.setIdsToCookies(str, userId);
		thisObj.refreshBasketCount(str);
		Utils.debug(document.cookie);
		var el = $(this);
			if (el.is('input') && el.hasClass('toBasket')){
				el.parents('#moveToBacketSection').remove();
			} else {
		        $(this).remove();
			}
	},

	addGroup : function(){
		var checkedInputs = $('.sortable input:checked');
		for(var i = 0; i < checkedInputs.length;i++){
			$('.toBasket.'+checkedInputs[i].value).click();
		}
	},
    
	remove : function(){
		var thisObj = this.thisObj;
		var id = this.className.split(' ')[1];
		var userId = this.className.split(' ')[2];
		var ids = thisObj.getIdsFromCookie(userId).split('|');
		var str = '';
		for(var i = 0;i < ids.length;i++){
			if(ids[i] != id){
				if(str != ''){
					str += ('|' + ids[i]);
				}else{
					str += ids[i];
				}
			}
		}
		thisObj.setIdsToCookies(str, userId);
		thisObj.refreshBasketCount(str);
		thisObj._notifyRemoveListeners(id);
		Utils.debug(document.cookie);
	},
	
    removeAll: function(){
        var ziz = this;
		var removeConfirm = new PopUp('', 'confirm','','Удаление расчета')
		removeConfirm.setButtonText({'ok' : 'Удалить','cancel' : 'Отмена'}); 	
        removeConfirm.show(removeConfirm);
        removeConfirm.addResultListeners({
			popupNotify: function(b,o) {
				if (!b) return false;
                var thisObj = ziz.thisObj;
                var id = ziz.className.split(' ')[1];
		var userId = ziz.className.split(' ')[2];
		try{
	                var ids = thisObj.getIdsFromCookie(userId).split('|');
		}catch(e){}
		if(ids){
                var str = '';
                for(var i = 0;i < ids.length;i++)
                    if(ids[i] != id)
                        if(str != '') str += ('|' + ids[i]);
                        else str += ids[i];
                thisObj.setIdsToCookies(str, userId);
                }
		thisObj._notifyRemoveListeners(id);
                Utils.debug(document.cookie);
                $("#fromAll input[name='SelectedCaseId']").val(id);
                $('#fromAll').submit();
			}
		});
		$('#basketCount').empty();
    },
    
    getFile: function() {
        var thisObj = this.thisObj;
        var id = this.className.split(' ')[1];
        var html ='<p><a href="/policy_file.wbh?CaseId='+id+'&FileType=PolicyProject">Проект полиса</a></p>';
        html +='<p><a href="/policy_file.wbh?CaseId='+id+'&FileType=InsuranceApplication">Заявление на страхование</a></p>';
        var alert = new PopUp('', 'alert',html,'Загрузка проекта полиса')
        alert.setButtonText({'ok' : 'Закрыть'}); 	
        alert.show(alert);
        
    },
    
	addRemoveListener : function(callback){
		this.removeListeners.push(callback);
	},
	
	getIdsFromCookie : function(userId){
		var ids = document.cookie.split('basket'+userId+'=')[1];
		if (ids !== undefined) {
			ids = ids.split(';')[0];
		}
		return ids;
	},
	
	setIdsToCookies : function(str, userId){
		document.cookie = "basket"+userId+"="+str+"; path=/"; 
	},
	
	_notifyRemoveListeners : function(id){
		for(var i = 0;i < this.removeListeners.length;i++){
			this.removeListeners[i].fireRemoveEvent(id);
		}
	},
	
	refreshBasketCount: function(str) {
		if (str) {
			$('#basketCount').text('(' + str.split('|').length + ')');
		} else {
			$('#basketCount').empty();
		}
	}
}
