var clickFirst=0;
var clickSecond=0;

document.onkeyup=keyUp;
document.onkeydown=keyDown;
keyCodePress = "";

var rowSelected = new Array();
var rowStatus = new Array();
var rowLastSelected = -1;

/* Gestisce l'evento doubleClick su di una riga*/
function rowClick(urlRedirect) {
	
	var d = new Date()
	var t = d.getTime()
	var timeDiff = 0
	var limitTime = 300
	
	if (t-clickFirst>limitTime) {
		clickFirst=0
	}
	
	if (clickFirst>0) {
		clickSecond = t
		timeDiff = clickSecond-clickFirst
		clickFirst = 0
		clickSecond = 0
		//Eseguo l'azione se è stato un doppio click
		if (timeDiff<limitTime) {
			//alert("Hello world! :"+urlRedirect);
			window.location = urlRedirect
		}
	} else {
		clickFirst = t
	}

}

function rowRedirect(urlRedirect) {

	if (urlRedirect != "") {
		window.location = urlRedirect
	}

}

/* Gestisce l'evento mouseOver su di una riga*/
function rowOver(idStyle,newStyle) {

	if (rowStatus[idStyle]!="SELECTED") {
		document.getElementById(idStyle).className = newStyle
		document.getElementById(idStyle).style.cursor = "pointer"
	}
	
}

/* Gestisce l'evento mouseOut su di una riga*/
function rowOut(idStyle,oldStyle) {

	if (rowStatus[idStyle]!="SELECTED") {
		document.getElementById(idStyle).className = oldStyle
	}
	
}

/* Aggiunge l'indice riga all'array di riferimento*/
function rowAdd(indexRow) {
	
	if (rowIsSelected(indexRow) == false) {
		//Aggiungo la riga
		rowSelected[rowSelected.length]=indexRow;
	}
	
}

/* Aggiunge l'indice riga all'array di riferimento*/
function rowDelete(indexRow) {
	
	var j=0;
	while (j < rowSelected.length) {
		if (rowSelected[j] == indexRow) {
			//alert("Trovato all'indice " + j);
			rowSelected.splice(j,1);
		}
		j=j+1;
	}
	
}

/* Aggiunge l'indice riga all'array di riferimento*/
function rowDeleteScript() {
	
	var i=0;
	showString = "";
	while (i<rowSelected.length) {
		showString = showString + document.getElementById('gridRowID'+rowSelected[i]).value + ",";
		i=i+1;
	}
	if ((i>0)&&document.getElementById('urlActionDelete')) {
		if (confirmLink(this, 'Vuoi procedere con la cancellazione di tutti gli elementi selezionati?')) {
			//alert("Cancellazione di " + showString);
			var myUrl = "";
			myUrl = document.getElementById('urlActionDelete').value + "&idMmodify=" + showString;
			//alert(myUrl);
			window.location = myUrl;
		} else {
			return true;
		}
	}
	
}

/* Aggiunge l'indice riga all'array di riferimento*/
function rowShowSelected() {
	
	var i=0;
	showString = "";
	while (i<rowSelected.length) {
		showString = showString + " / " + rowSelected[i];
		i=i+1;
	}
	
	alert(keyCodePress+ " " +showString);
	
}

/* Verifica se una riga è già selezionata*/
function rowIsSelected(indexRow) {
	
	//Controllo che la index non sia già caricata nell'array rowSelected
	i=0;
	foundElement = false;
	while ((i<rowSelected.length)&&(foundElement == false)) {
		if (rowSelected[i]==indexRow) {
			foundElement = true;
		}
		i=i+1;
	}
	
	return foundElement;
	
}

/* Deseleziona tutte le righe reinizializzando gli array*/
function rowDestroySelected() {
	
	k=0;
	while (k<rowSelected.length) {
		idStyle = "gridRow" + rowSelected[k];
		rowStatus[idStyle] = "";
		document.getElementById(idStyle).onmouseout();
		k++;
	}
	rowSelected.splice(0,rowSelected.length);
	
}

/* Seleziona/Deseleziona una riga*/
function rowSelect(indexRow,idStyle) {

	//Verifico se si sta effettuando una slezione multipla
	if ((keyCodePress=="SHIFT")&&(rowLastSelected>-1)) {
		//Seleziono tutte le righe dall'ultima a questa
		if (rowLastSelected>-1) {
			rowSelectMultiple(rowLastSelected,indexRow);
			//Setto la riga come ultima selezionata
			rowLastSelected=indexRow;
		}
	} else {
		
		//Seleziono/Deseleziono singola cella
		if (rowIsSelected(indexRow)==true) {
			
			//Verifico se sono seleziona più elementi
			if (rowSelected.length>1) {
				//Nel caso siano selezionati più elementi con il tasto CTRL premuto 
				//disattivo solo l'elemento corrente mentre con il tasto CTRL NON premuto 
				//seleziono solo quell'elemento
				if (keyCodePress=="CTRL") {
					//Setto lo stato della riga
					rowStatus[idStyle] = "";
					//Elimino la mia riga dall'array rowSelected
					rowDelete(indexRow);
					//Decoloro la mia riga
					document.getElementById(idStyle).onmouseout();
					rowLastSelected = -1;
					if (rowSelected.length>1) {
						rowLastSelected = rowSelected[rowSelected.length-1];
					}
				} else {
					//Setto lo stato della riga
					rowDestroySelected();
					document.getElementById(idStyle).className = "gridRowsSelected";
					rowStatus[idStyle] = "SELECTED";
					rowLastSelected = indexRow;
					rowAdd(indexRow);
				}
				
			}
 					
		} else {
			if (keyCodePress!="CTRL") {
				rowDestroySelected();
			}
			//Setto lo stato della riga
			rowStatus[idStyle] = "SELECTED";
			//Coloro la cella
			document.getElementById(idStyle).className = "gridRowsSelected";
			//Setto la riga come ultima selezionata
			rowLastSelected=indexRow;
			rowAdd(indexRow);
		}
	}

	document.getElementById(idStyle).style.cursor = "pointer"
	
}

function rowSelectMultiple(indexStart,indexEnd) {

	if (indexEnd<indexStart) {
		indexTemp = indexEnd;
		indexEnd = indexStart;
		indexStart = indexTemp;
	}
	
	while (indexStart<=indexEnd) {
		idStyle="gridRow"+indexStart;
		rowStatus[idStyle] = "SELECTED";
		//Coloro la cella
		document.getElementById(idStyle).className = "gridRowsSelected";		
		rowAdd(indexStart);
		indexStart++;
	}
	
}

/* Gestisce gli eventi derivati dalla Key Down*/
function keyDown(e) { 
    var evt=(e)?e:(window.event)?window.event:null;
    if(evt){ 
        var key=(evt.charCode)?evt.charCode: ((evt.keyCode)?evt.keyCode:((evt.which)?evt.which:0));
        //alert(key);
                
        //Azione di Selezione riga inferiore UP
        if (key==40) {
        	if (document.getElementById("gridRow"+(rowLastSelected+1))) {
				rowSelect(rowLastSelected+1,"gridRow"+(rowLastSelected+1))
			}
		}
         
        //Azione di Selezione riga superiore DOWN
        if (key==38) {
        	if (document.getElementById("gridRow"+(rowLastSelected-1))) {
				rowSelect(rowLastSelected-1,"gridRow"+(rowLastSelected-1))
			}
        }
	
		//Azione Tasto L
  		if (key==76) {
 			//rowShowSelected();
		}
       
        //Azione di Selezione multipla CTRL
        if ((key==17)||(key==224)) {
            keyCodePress = "CTRL"
        }
        
        //Azione di Selezione multipla SHIFT
        if (key==16) {
            keyCodePress = "SHIFT"
        }
       
        //Azione di Cancellazione CANC o BACK
        if((key=="46")||(key=="8")) {
            rowDeleteScript();
        	//alert("Cancellazione multipla");
        }
	} 
}

/* Gestisce gli eventi derivati dal Key UP*/
function keyUp(e) {
    
    var evt=(e)?e:(window.event)?window.event:null;
    if(evt){ 
        var key=(evt.charCode)?evt.charCode: ((evt.keyCode)?evt.keyCode:((evt.which)?evt.which:0));
    }          
       
    if ((keyCodePress=="SHIFT+UP")||(keyCodePress=="SHIFT+DOWN")) {
        if ((key==38)||(key==40)) {
            keyCodePress = "SHIFT";
        } else {
            keyCodePress = "";  
        }
    } else {
        keyCodePress = "";
    }
    
}

//AJAX Function

var checkArrayStatus = new Array();
var checkArrayCaption = new Array();
var checkTotElement = 0;

function checkLoadStatus(idElement,status) {
	
	if (idElement!="") {
		checkArrayStatus[checkTotElement] = status;
		checkArrayCaption[checkTotElement] = idElement;
		checkTotElement++;
	}
	
	return true;
	
}

function checkSetStatus(idElement,status) {
	
	checkArrayStatus[checkIsId(idElement)] = status;
	
	return true;
	
}

function checkIsId(idElement) {
	
	var i = 0;
	var foundElement = false;
	while ((foundElement==false)&&(i<=checkTotElement)) {
		if (checkArrayCaption[i]==idElement) {
			foundElement = true;
		} else {
			i=i+1;
		}
	}
	if (foundElement==true) {
		return i;
	} else {
		return -1;
	}
	
}

function createRequestObject() {  
    var ro;  
    var browser = navigator.appName; 
    
    if(browser == "Microsoft Internet Explorer") {  
        ro = new ActiveXObject("Microsoft.XMLHTTP");  
    } else {  
        ro = new XMLHttpRequest();  
    }  
    return ro;  
}  

function checkSendAction(myIDCheck,myLink) { 

	//alert("Check: "+myIDCheck + ": "+checkArrayStatus[myIDCheck]);
	
	//Verifico lo stato dell'elemento
	var newStatus = 0;
	if (checkArrayStatus[checkIsId(myIDCheck)]==1) {
		newStatus = 0;
	} else {
		newStatus = 1;
	}
	
	//Metto lo stato del CHECK in Pausa
	document.getElementById(myIDCheck).src = "img_struct/checkQuery.gif";

    var httpCheck = false;

    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        httpCheck = new XMLHttpRequest();
        if (httpCheck.overrideMimeType) {
            httpCheck.overrideMimeType('text/xml');
        }
    } else if (window.ActiveXObject) { // IE
        try {
            httpCheck = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                httpCheck = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }

	
	//Rifinisco la stringa di Link
	var myLink = myLink + "&value="+newStatus+"&callNumber="+Math.random();

    if (!httpCheck) {
		//Nel caso il browser non supporti l'oggetto XMLHttpRequest eseguo un semplice redirect
		return false;
	}

    httpCheck.open('GET', myLink); 
    httpCheck.onreadystatechange = function() { checkResponse(httpCheck); };
    httpCheck.send(null);  
}  
  
function checkResponse(httpCheck) {  

    if (httpCheck.readyState == 4) {
    
    	if (httpCheck.status == 200) {
    	
    		//alert(httpCheck.responseText);
    	    var response = httpCheck.responseText;  
       	 	var update = new Array();  
  		  		
        	if (response.indexOf('|' != -1)) {  
        
           	 	update = response.split('|');  
            	var elementIDCheck = update[0];  
            	var elementNewStatus = update[1];
            
            	//Modifico lo stato dell'elemento
            	checkSetStatus(elementIDCheck,elementNewStatus);
            	if (elementNewStatus==0) {
            		document.getElementById(elementIDCheck).src = "img_struct/off.gif";
            	} else {
            		document.getElementById(elementIDCheck).src = "img_struct/on.gif";            
            	}
            
            }
            
        }  
        
    }  
    
}  

