/**
* Dérivée de YAHOO.widget.DataTable
* Permet de rajouter des évènements sur les changements de page.
*/
YAHOO.namespace ("Sqli.Widgets"); 

YAHOO.Sqli.Widgets.DatatableImpl = function(elContainer,aColumnDefs,oDataSource,oConfigs) {
	YAHOO.Sqli.Widgets.DatatableImpl.superclass.constructor.call(this,elContainer,aColumnDefs,oDataSource,oConfigs);
}
YAHOO.extend(YAHOO.Sqli.Widgets.DatatableImpl, YAHOO.widget.DataTable);

YAHOO.Sqli.Widgets.DatatableImpl.prototype._onPaginatorDropdownChange = function(e, oSelf) {
	YAHOO.Sqli.Widgets.DatatableImpl.superclass._onPaginatorDropdownChange.call(this,e, oSelf); 
	oSelf.fireEvent("paginatorDropdownChangeEvent");
}

YAHOO.Sqli.Widgets.DatatableImpl.prototype._onPaginatorLinkClick = function(e, oSelf) {
	YAHOO.Sqli.Widgets.DatatableImpl.superclass._onPaginatorLinkClick.call(this,e, oSelf); 
	oSelf.fireEvent("paginatorLinkClickEvent");
}

/**
* Widget DataTable
*/
YAHOO.Sqli.Widgets.DataTable = { 
	/**
	* Liste à plusieurs colonnes
	* @param String le label de la première colonne
	* @param String l'id de la table html dans laquelle se trouve les données
	* @param String l'url pour l'édition
	* @param String l'url pour la suppression
	* @param Array tableau des autres colonnes ou null
	* @param String le caption de la table
	* @param String est ce qu'on peut supprimer ou pas, par défaut vaut true
	* @param String Colonne de tri, par défaut, la première colonne
	* @param String Sens de tri, par défaut, asc
	* @param String est ce que on gère plusieurs pages, par défaut true
	* @param String taille des pages par défaut
	*/
 	liste: function(titleLabel, tableId, urlEdit, urlDelete, othersCols, caption, 
 					canDelete, sortCol, sortOrder, paginated, pageSize) {
	    	this.titleLabel = titleLabel;
	    	this.tableId = tableId;
	    	this.caption = caption == null ? "" : caption;
	    	this.urlEdit = urlEdit;
	    	this.urlDelete = urlDelete;
	    	this.othersCols = othersCols;
	    	this.canDelete = canDelete;
	    	this.sortCol = sortCol;
	    	this.sortOrder = sortOrder;
	    	this.paginated = paginated;
	    	this.pageSize = pageSize;
	    
	    	
	    	this.formatEdit = function(elCell, oRecord, oColumn, sData) {
	    		if (urlEdit.indexOf('javascript:',0)>=0)	//fonction javascript
		            elCell.innerHTML = "<a href=\""+urlEdit+"('" + sData + "');\" title='Editer'><img src='ui/default/BO/images/btn-update.png' alt='Editer' title='Editer' /></a>";
	    		else
		            elCell.innerHTML = "<a href='"+urlEdit+"&id=" + sData + "' title='Editer'><img src='ui/default/BO/images/btn-update.png' alt='Editer' title='Editer' /></a>";
	        };
	    
	    	this.formatDel = function(elCell, oRecord, oColumn, sData) {
	    	
	    		if(sData != "noDelete"){
	            elCell.innerHTML = "<a href='#' onclick='YAHOO.Sqli.Utils.Tools.confirmDelete(\""+urlDelete.replace(/\'/g,"`").replace(/\"/g,"\\\"")+"\",\"" + 
	            	sData + "\",\"" + oRecord.getData("titre").replace(/\'/g,"`").replace(/\"/g,"\\\"")  + "\");return false;' title='Supprimer'><img src='ui/default/BO/images/btn-delete.png' alt='Supprimer' title='Supprimer' /></a>";
	            }
	        };
	    	
	        var myColumnDefs = new Array();
	        var fields = new Array();
	        
	        myColumnDefs.push({key:"titre",label:this.titleLabel,sortable:true});
	        fields.push("titre");
	        
	        if(this.canDelete == null || this.canDelete != "false"){
	        	this.canDelete = true;
	        }
	        
	        if (urlDelete == "forceCanDelete") this.canDelete = false;
	        	    	
	        if(this.paginated == null || this.paginated != "false"){
	        	this.paginated = true;
	        }
	        
	        if(this.sortCol == null){
	        	this.sortCol = "titre";
	        }
	        
	        if(this.pageSize == null){
	        	this.pageSize = 50;
	        }else{
	        	this.pageSize = parseInt(this.pageSize);
	        }
	        
	        if(this.sortOrder == null || (this.sortOrder != null && this.sortOrder != "desc")){
	        	this.sortOrder = "asc";
	        }
	        
	        if(this.othersCols != null){
	        	for(var i=0; i< this.othersCols.length; i++){
	        		var curr = this.othersCols[i];
	        		// la
	        		
	        		
	        		if(curr.type == "date")
	        		{
	        			myColumnDefs.push({key:curr.prop,label:curr.label,sortable:true, formatter:myFormatDate});
	        		} else if(curr.type == "currency")
	        		{
	        			myColumnDefs.push({key:curr.prop,label:curr.label,sortable:true, formatter:myCurrency});
	        		} else {
	        			myColumnDefs.push({key:curr.prop,label:curr.label,sortable:true});
	        		}
	        		
	        		
	        		if(curr.type == "date")
	        		{
	        			fields.push({key:curr.prop, parser:myParseDate});
	        		} else if(curr.type == "currency")
	        		{
	        			fields.push({key:curr.prop, parser:YAHOO.util.DataSource.parseNumber});
	        		} else if (curr.type == "number")
	        		{
	        			fields.push({key:curr.prop, parser:YAHOO.util.DataSource.parseNumber});
	        		} else {
	        			fields.push({key:curr.prop});
	        		}
					
	        	}
	        }
	        
			myColumnDefs.push({key:"edit", label:"Editer",formatter:this.formatEdit, sortable:false});
			fields.push("edit");
			if(this.canDelete == true || this.canDelete == "true" || this.canDelete == "1"){
				myColumnDefs.push({key:"del", label:"Supprimer",formatter:this.formatDel, sortable:false}); 
	       	   	fields.push("del");
	       	}
	
			this.myDataSource = new YAHOO.util.DataSource(YAHOO.util.Dom.get(this.tableId)); 
		    this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE; 
		    this.myDataSource.responseSchema = { 
	            fields: fields
	        }; 
			
			this.myConfigs = { 
				caption:this.caption,
				sortedBy:{key:this.sortCol,dir:this.sortOrder},
		        paginated:this.paginated, 
		        paginator:{ 
		            containers: null, 
		            currentPage: 1,
		            dropdownOptions: [10,25,50,75], 
		            pageLinks: 0, 
		            rowsPerPage: this.pageSize
		        } 
			};
			
	        this.myDataTable = new YAHOO.widget.DataTable("markup", myColumnDefs, 
	        												this.myDataSource,this.myConfigs);
	
		}
}

var myFormatDate = function(elCell, oRecord, oColumn, oData) {
	var oDate = oData; 
	var mois;
	if(oDate.getMonth() < 9)
	{
		mois = "0" + (oDate.getMonth()+1);
	}
	else
	{
		mois = (oDate.getMonth() +1);
	}
	
	var jour;
	if(oDate.getDate() < 10)
	{
		jour = "0" + oDate.getDate();
	}
	else
	{
		jour = oDate.getDate();
	}
	elCell.innerHTML = jour + "/" + mois + "/" + oDate.getFullYear(); 
}


var myCurrency = function(el, oRecord, oColumn, oData) {
    if(YAHOO.lang.isNumber(oData)) {
        var nAmount = oData;
        var markup;

        // Round to the penny
        nAmount = Math.round(nAmount*100)/100;

        // Default currency is USD
        markup = "" + nAmount;

        // Normalize digits
        var dotIndex = markup.indexOf(".");
        if(dotIndex < 0) {
            markup += ".00";
        }
        else {
            while(dotIndex > markup.length-3) {
                markup += "0";
            }
        }
        el.innerHTML = markup;
    }
    else {
        el.innerHTML = YAHOO.lang.isValue(oData) ? oData : "";
    }
};

var myParseDate = function(oData) {
    var date = null;
    //Convert to date
    
    if(!(oData instanceof Date)) {
    	tab = oData.split("/");
    	
        date = new Date();
        date.setDate(tab[0]);
        date.setMonth(tab[1]-1);
        date.setFullYear(tab[2]);
        
    }
    else {
        return oData;
    }

    // Validate
    if(date instanceof Date) {
        return date;
    }
    else {
        return null;
    }
};