var netedit = {
    options: {
    	colorEvidence: '#fff6de'
    },
    
    init: function(options){
    	this.options = $merge(this.options,options);
    	
		netedit.ajax.init();
		this.idLog = 'log-netedit';
		this.trSelected = null;
		this.tableBindEvents();
		this.actionsBindEvents();
		this.overtext();
    },
    
    overtext: function(){
    	//var inputsOverText = new OverText($$('.netedit-overtext'));
    },
    
    log: function(txt){
    	var div = new Element('div').set('html',txt);
    	var log = $(this.idLog);
    	if(log){
    		div.inject(log, 'top');
    	}else{
    		var log = new Element('div', {
    			id: this.idLog,
	    		'styles': {
					'overflow': 'auto',
					'font-size': '10px',
					'position': 'fixed', 
					'background': '#ffffff', 
					'width': '150px',
					'height': '50px', 
					'border': '1px #666666 solid', 
					'z-index': '99',
					'line-height': '100%'
				}
    		});
    		div.inject(log);
    		var bodyElement = $(document.body);
    		log.inject(bodyElement);    		
    	}
    },
    
    toggleDisplay: function(id, objCall){
    	var element = $(id);
		var srcAsc = "imgs/16x16/s_asc.png";
		var srcDesc = "imgs/16x16/s_desc.png";
		if(element){
			//var display = element.style.display;
			var display = element.getStyle('display');
			
			var img = null;
	
			if(objCall!=undefined){
				objCall = $(objCall);
				var imgs = objCall.getChildren('img');
				$each(imgs, function(imgChild, index){
					if(imgChild.get('src')==srcAsc || imgChild.get('src')==srcDesc){
						img = imgChild;
					}
				});
			}
	
			if(display=="" || display=="block" || display=="inline"){
				if(img==null){
					if(objCall!=undefined) objCall.innerHTML = objCall.innerHTML+'<img src="'+srcAsc+'" border="0" align="absmiddle">';
				}else{
					img.src = srcAsc;
				}
				element.style.display = 'none';
			}else{
				if(img==null){
					if(objCall!=undefined) objCall.innerHTML = objCall.innerHTML+'<img src="'+srcDesc+'" border="0" align="absmiddle">';
				}else{
					img.src = srcDesc;
				}
				if(element.tagName=='SPAN'){
					element.style.display = 'inline';
				}else{
					element.style.display = 'block';
				}
			}
		}
		return false;
    },
    
    actionsBindEvents: function(){
    	var trs = $$('div.list').addEvents(
			{
				'mouseover': function(e){
					var divActions = this.getElement('div.list-actions');
					if(divActions){
						divActions.setStyle('display', 'block');
					}
				},
				'mouseout': function(e){
					var divActions = this.getElement('div.list-actions');
					if(divActions){
						divActions.setStyle('display', 'none');
						}
					}
			}	
        );
    },
    
    
    tableBindEvents: function(){
    	var trs = $$('table.netedit-list > tbody > tr').addEvents(
    		{
    			'mouseover': function(e){
					var event = new Event(e);	
					if(this.get('class')=='netedit-header') return;
										
					this.store('originalBackground', this.getStyle('background'));
					this.store('originalColor', this.getStyle('color'));
					if (Browser.ie8){
					
					}else{
						this.setStyle('background', 'none repeat scroll 0 0 rgba(100, 100, 100, 0.1)');
    				}
					this.setStyle('color', '#000000');
					
					this.addClass('over');
					//this.log('mouseover');
				},
				'mouseout': function(e){
					var event = new Event(e);
					if(this.get('class')=='netedit-header') return;
					
					this.setStyle('background', this.retrieve('originalBackground'));
					this.setStyle('color', this.retrieve('originalColor'));
					
					
					this.removeClass('over');
					//this.log('mouseout');
				},
				'mousedown': function(e){
					if(this.get('class')=='netedit-header') return;
		    		this.addClass('down');
		    	},
		    	'mouseup': function(e){
		    		if(this.get('class')=='netedit-header') return;
		    		this.removeClass('down');
		    	},
				'click': function(e){
					if(this.get('class')=='netedit-header') return;
		    		netedit.trEvidence(this);
		    	}
    		}	
    	);
    },
    
    trEvidence: function(tr){
    	if(tr==this.trSelected) return;
		if (this.trSelected!=null) {
			  this.trSelected.setStyle('background', this.trSelected.retrieve('originalEvidenceBackground'));
			  this.trSelected.setStyle('color', this.trSelected.retrieve('originalEvidenceColor'));
			  this.trSelected.removeClass('selected');
		}
		if(!tr.retrieve('originalSelectColor')){
			tr.store('originalEvidenceBackground', tr.retrieve('originalBackground'));
			tr.store('originalEvidenceColor', tr.retrieve('originalColor'));
		}
		if (Browser.ie8){
			
		}else{
			tr.setStyle('background', 'none repeat scroll 0 0 rgba(200, 200, 200, 0.5)');
		}
		tr.setStyle('color', '#000000');
		tr.store('originalBackground', tr.getStyle('background'));
		tr.store('originalColor', tr.getStyle('color'));
		tr.addClass('selected');
	    this.trSelected = tr;
	},
	
	addTr: function(id_before, tdArray, id_row, className){
		var trBefore = $(id_before);
		var tbody = trBefore.parentNode;
		var row = document.createElement("TR");
		row.id = id_row;
		row.className = className;
		for(var i=0; i<tdArray.length; i++){
			var td = document.createElement("TD");
			td.innerHTML = tdArray[i];
			row.appendChild(td);
		}
	
		tbody.insertBefore(row, trBefore);
	},
	
	formatDecimal: function(argvalue, addzero, decimaln){
		var numOfDecimal = (decimaln == null) ? 2 : decimaln;
		var number = 1;
		number = Math.pow(10, numOfDecimal);
		argvalue = Math.round(parseFloat(argvalue) * number) / number;
		argvalue = "" + argvalue;
		if (argvalue.indexOf(".") == 0)
		{
		  argvalue = "0" + argvalue;
		}
		if (addzero == true)
		{
			if (argvalue.indexOf(".") == -1)
			{
				argvalue = argvalue + ".";
			}
	
			while ((argvalue.indexOf(".") + 1) > (argvalue.length - numOfDecimal))
			{
				argvalue = argvalue + "0";
			}
		}
		return argvalue;
	},
	
	editTplSelected: function(selectId, templateDir){
		if(!selectId) selectId = 'template_path';
		var select = $(selectId);
		var selValue = select.options[select.selectedIndex].value;
		if(selValue!=''){
			window.location = '?controller[pages]=templates&action[templates]=edit&file=templates/modules/'+templateDir+'/'+selValue+'/index.php';
		}else{
			alert('Questo template non e\' modificabile!');
		}
	},
	
	urlencode: function(str) {
		return escape(str).replace(/\+/g,'%2B').replace(/%20/g, '+').replace(/\*/g, '%2A').replace(/\//g, '%2F').replace(/@/g, '%40');
	},
	
	removeTags: function(string, tag){
		
		var re= new RegExp('<'+tag+'[^><]*>|<.'+tag+'[^><]*>','g')
		return string.replace(re,'');
	}
	
};


Number.implement({

	/*
	Property: numberFormat
		Format a number with grouped thousands.

	Arguments:
		decimals, optional - integer, number of decimal percision; default, 2
		dec_point, optional - string, decimal point notation; default, '.'
		thousands_sep, optional - string, grouped thousands notation; default, ','

	Returns:
		a formatted version of number.

	Example:
		>(36432.556).numberFormat()  // returns 36,432.56
		>(36432.556).numberFormat(2, '.', ',')  // returns 36,432.56
	*/

	numberFormat : function(decimals, dec_point, thousands_sep) {
		decimals = Math.abs(decimals) + 1 ? decimals : 2;
		dec_point = dec_point || '.';
		thousands_sep = thousands_sep || ',';
	
		var matches = /(-)?(\d+)(\.\d+)?/.exec((isNaN(this) ? 0 : this) + ''); // returns matches[1] as sign, matches[2] as numbers and matches[3] as decimals
		var remainder = matches[2].length > 3 ? matches[2].length % 3 : 0;
		return (matches[1] ? matches[1] : '') + (remainder ? matches[2].substr(0, remainder) + thousands_sep : '') + matches[2].substr(remainder).replace(/(\d{3})(?=\d)/g, "$1" + thousands_sep) + 
				(decimals ? dec_point + (+matches[3] || 0).toFixed(decimals).substr(2) : '');
	}


});

window.addEvent("domready", function(){
	netedit.init();
});
