// List Css classes
var listData = "listData";
var listHeader = "listHeader";
var listHeaderData = "listHeaderData";
var listRowOdd = "listRowOdd";
var listRowEven = "listRowEven";
var listCell = "listCell";
var listImage = "listImage";
var listFooterData = "listFooterData";
var initorder;
var columnIndicators = null;
var columnPrefix = "col_";
var orderBy = "";
var orderDirection="";

var remoteChecks = new Array();

// Go to a specific page in grid
function goToPage(currentPage,pages,page) { 
    if ((page < 0) || (page > pages)) {
        $('current_page').value=currentPage+1;
        return;
    }
    else {
        changeListPage(page);
    }
}

// Sort by column
function sortBy(columnName,run) {
    if ((orderBy != "") && (orderBy != columnName)) {
        orderDirection = "";
    }

    orderBy = columnName;
    
    if ((orderDirection == "") || (orderDirection == "DESC")) {
        orderDirection = "ASC";
    }
    else {
        orderDirection = "DESC";
    }

    // Reset column indicators
    for (var col in columnIndicators) {
        columnIndicators[col]="";
    }

    // Create column indicator for current column
    updateColumnIndicator(columnName,orderDirection);
    if (run!=0) {
     
     changeListPage(-1);
    }

}

// Update column indicator
function updateColumnIndicator(columnName,orderDirection) {
    // Create column indicator for current column
    imageHtml = "<span id=\"listColumnIndicator\">\n";
    if (orderDirection == "ASC") {
        imageHtml += "<img src=\"/images/AscOn.png\" alt=\"arrow\"/>\n";
    }
    else {
        imageHtml += "<img src=\"/images/DescOn.png\" alt=\"arrow\"/>\n";
    }
    imageHtml += "</span>\n";

    // Update html and indicators array

    var index = columnName.indexOf(".");
    if (index != -1) {
       
        columnName = columnName.substr(++index);
        
    }

    columnIndicators[columnName]=imageHtml;
    $(columnPrefix+columnName).update(imageHtml);
    
}

// Crea la navbar per le liste
function createNavBar(currentPage, pages) {

    //var content = "<div class='navBar'>";
    //content = "<table class='navBar' cellpadding=0 cellspacing=0 width='100%'>";
    //content += "<tr><td height=11 colspan=2>&nbsp;</td></tr>"
    //content += "<tr valign='top'><td height=37 width=4>&nbsp;</td><td><div>";
    var content = "<div class='navBar'>";
    
    var actualCurrentPage = parseInt(currentPage) + 1;

    var firstPage = currentPage-1;
    if (firstPage < 0) {
        firstPage = 0;
    }

    content += "<a href=\"#\" onclick='changeListPage(0)'><img src='/images/media_beginning.png' alt='Pagina precedente' text='Pagina precedente' class='navBarImg'></a>";
    content += "<a href=\"#\" onclick='changeListPage("+firstPage+")'><img src='/images/media_rewind.png' alt='Pagina precedente' text='Pagina precedente' class='navBarImg'></a>";

    content += "Pagina <input class=\"navBarText\" onchange='goToPage("+currentPage+","+pages+","+"this.value-1)' size=\"5\" type=\"text\" id=\"current_page\" name=\"current_page\" value=\""+actualCurrentPage+"\"/>";
    
    if (pages == 0) {
        content += " di 1";
    }
    else {
        content += " di "+pages;        
    }
    

    var lastPage = actualCurrentPage;
    if (actualCurrentPage > pages-1) {
        lastPage = pages-1;
    }

    content += "<a href=\"#\" onclick='changeListPage("+lastPage+")'><img src='/images/media_fast_forward.png' alt='Pagina successiva' text='Pagina successiva' class='navBarImg'></a>";
    content += "<a href=\"#\" onclick='changeListPage("+(pages-1)+")'><img src='/images/media_end.png' alt='Pagina precedente' text='Pagina precedente' class='navBarImg'></a>";

    content += "</div>";

    
    //content += "</td></tr></table>";
    

    return content;
}

// Ajax Call Options
var ajaxCallOptions = {
    method: 'post',
    parameters:'search=',
    onSuccess: handleAjaxSuccess,
    onFailure: handleAjaxFailure,
    onComplete:handleAjaxComplete
}

function handleAjaxComplete(transport) {
    var json = transport.responseText.evalJSON(true);

    var action = json.action;
    var tabname = json.tabname;
    
    if(action == "delete") {
       if (tabname) {
         ajaxCompleted(action,tabname);
       }
    }
}

function handleAjaxFailure(transport) {
    alert("Errore imprevisto nella chiamata al server, contattare l'amministratore di sistema");
}

function handleAjaxSuccess(transport) {
    
    
    

    var json = transport.responseText.evalJSON(true);    
var types = json.data;
var pages = json.pages;
    var action = json.action;
    var currentPage = json.offset;
    var maxRows = json.maxrows;
    var nomove = json.nomove; 
    
    
    // Delete element
    if (action == 'delete') {
        var result = json.result;
        var message = json.message;

        if (result == -1) {
            $('waitbox2').hide();
            alert(message);
            return;
        }        
    }
    
    
    

    var content="";
    var index=0;
    
    columnIndicators = new Array();
    
    var numberOfColumns = types[0].length;
        
    var cellCount = 0;

    content += "<table cellpadding=0 cellspacing=0 width=\"100%\">";
    content += "<tr class=\""+listHeader+"\">";
    if (!nomove) {
    content += "<td class=\"GridTopLeft\" >&nbsp;</td>";
    }
    types[0].each(function (cells) {
           if(cells.visible == 0) {numberOfColumns--;return;}

           cellCount++;

            var rowString = "<td ";

            if (cells.width != -1) {
                  if (cells.width > 0) {
                    rowString += "width=\""+cells.width+"\"";
                  }
            }

            rowString += " class=\""+listHeaderData+"\">";
            if (cells.sortable == 1) {
                rowString += "<a href=\"#\" onclick=sortBy('"+cells.orderby+"')>";
                rowString += cells.text;
                rowString += "</a>";
                rowString += "<span id=\""+columnPrefix+cells.name+"\"/>";
                columnIndicators[cells.name]="";
            }
            else {
                rowString += cells.text;
            }

            rowString += "</td>";
            
            if (cellCount != numberOfColumns) {
                rowString += "<td class=\"GridSeparatorCentral\">&nbsp;</td>";
            }

            content += rowString;
    });
    if (!nomove) {
    content += "<td class=\"GridTopRight\" >&nbsp;</td>";
    }
    content += "</tr>";
   
    var numberOfActualRows = 0;
    calctemp = (numberOfColumns -1) / 2;

    var firstuid = types[0][0].value;

    if (firstuid) {

    types.each(function(item) {
        position=index++ % 2;

        var style = listRowOdd;
        if (position == 0) {
            style=listRowEven;
        }

        var classcell = listCell;
               
        var colSpan = "";
        
        colSpan = " <td class=\"listCell\">&nbsp;</td> ";
       
        var cellcount = 1;

        var title="";
        var value = "";
        var calctemp = 1;
        item.each(function (cells) {            
            
            if (cells.name == "uniqueid") {
                content += "<tr onclick=\"edit(this.id)\" onmouseover=\"this.className='listRowUp'\"  onmouseout=\"this.className='"+style+"'\" id=\""+cells.value+"\" class=\""+style+"\">";
                if (!nomove) {
                content += "<td  class=\"GridItemLeft\" valign='top' ><span class='"+classcell+"'></td>";
                }
                return;
            }

            if(cells.visible == 0) {return;}
            
            title = cells.value;
            value = formatCell(title,cells.size);
            if (title == value) {
                title = "";
            }
            
            content += "<td valign=\"top\" title=\""+title+"\" class=\""+listCell+"\">";
            content += value;
            content += "</td>";
                                  
            if (calctemp++ <  cellCount ) {
                    content+=colSpan;
            }
        });
 
        cellcount++;
        if (!nomove) {
        if (style == listRowOdd) {
          content += "<td class=\"GridRightSeparator2\" >&nbsp;</td>";
        } else {
          content += "<td class=\"GridRightSeparator\" >&nbsp;</td>";
        }
        }
        
        content += "</tr>";
        numberOfActualRows++;
    });
    } // if firstuid

    for(i=0;i<(maxRows-numberOfActualRows);i++) {
        var style = listRowOdd;
        position=index++ % 2;

        if (position == 0) {
            style=listRowEven;
        }
        content += "<tr class=\""+style+"\">";
        if (!nomove) {
        content += "<td  class=\"GridItemLeft\" >&nbsp;</td>";
        }
        content += "<td colspan=\""+(cellCount*2-1)+"\" valign=\"top\" class=\""+listCell+"\">\n";
        content += "&nbsp;\n";
        content += "</td>\n";
        if (!nomove) {
        if (style == listRowOdd) {
          content += "<td class=\"GridRightSeparator2\" >&nbsp;</td>";
        } else {
          content += "<td class=\"GridRightSeparator\" >&nbsp;</td>";
        }
        }

        content += "</tr>\n";

    }

    content += "<tr class=\""+listHeader+"\">\n";
    content += "<td  class=\""+listFooterData+"\" colspan=\""+(cellCount*2+1)+"\">\n";
    content += createNavBar(currentPage, pages);
   
    content += "</tr>\n";
    content+="</table>\n";

    $('elements').update(content);

    if (orderBy != "") {
        updateColumnIndicator(orderBy,orderDirection);
    } else if (initorder)     {
        updateColumnIndicator(initorder,initorderdirection);
    }

    $('waitbox2').hide();

}

function formatCell(value,size) {

    if (!value) {
        return "&nbsp;";
    }
    if (value.length > size) {
      value = value.substring(0, size)+" <b>...</b>";
    }
    return value;
}

// Change list page
function changeListPage(page) {
   
    var params = new Object();
    params['offset'] = page;

    for(i=0; i<filters.length;i++) {
        var filterName = filters[i];
	if ($(filterName)) {
        params[filterName] = $(filterName).value;
	}
    }

    if (orderBy != "") {
        params['order_by'] = orderBy;
        params['order_direction'] = orderDirection;
    }
   
    ajaxCall(url,params,null);
    
}


// Delete element
function deleteElement(uid) {
    if(confirm(deleteMessage)) {
        var params = new Object();
        params['uid'] = uid;
        params['delete'] = 1;
        ajaxCall(deleteUrl,params,null);

    } 
}

function searchReset(noreset) {
    for(i=0; i<filters.length;i++) {
        var filterName = filters[i];
        if (filterName != noreset) {
          if($(filterName)) {
		$(filterName).value="";
	  }
        }
    }
    changeListPage(-2);
}

/*
// Add a remote check to the remote checks array
function addRemoteCheck(url,id,fieldValue) {
    var field = new Object();
    field['url']=url;
    field['id']=id;
    field['value']=fieldValue;

    remoteChecks.push(field);
}


// Execute remote checks in the remote checks array one by one (asynchronus ajax calls)
function executeRemoteChecks(formName) {
    var index = remoteChecks.length;
    if (index > 0) {
        var field = remoteChecks[0];
        remoteChecks.shift();

        var params = new Object();
        params['fieldvalue'] = field['value'];
        params['id'] = field['id'];
        params['formname'] = formName;

        ajaxCall(field['url'],params,null);
    }
    else {
        $(formName).submit();
    }

}
*/
// Create an ajax call
function ajaxCall(url,params,callBack) {
    parametersString = "";
    for (var key in params) {
        if (parametersString != "") {
            parametersString += "&";
        }
        parametersString += key+"="+params[key];
    }

    $('waitbox2').show();
    ajaxCallOptions.parameters = parametersString;

    if(callBack != null) {
        ajaxCallOptions.onSuccess = callBack;
    }
    new Ajax.Request(url,ajaxCallOptions);
}

// Set the value of an extended search field
// Like the status or type conditioning in document
// manager

/*
function setSearchField(fieldName,fieldValue) {
    $(fieldName).value = fieldValue;
    changeListPage(-2);
}
*/


//Validazione input
function isInt(x) {
   var y=parseInt(x);
   if (isNaN(y)) return false;
   return x==y && x.toString()==y.toString();
}
/*
function searchCellCommand(nome,ar) {
	var x = 0;

	for (x=0; x<ar[0].length; x++)
	{
	    if (ar[x][0] == nome) {
		  return ar[x][1];
	    }
	}

	return "";
}

function searchCellValue(item,name) {
    
    for (var my in item) {
          if (item[my].name == name) {
              return item[my].value;

          }
   }

   return "";

}
*/


function showTruncate(value,size) {
    value = value.substring(0, size)+"...";
    return value;
}

