/*
 * 
 * (c) Drive Developments
 * Author: Gavin Woods
 * Created: 8/05/2009
 * Description: Holds functions used by the REED Tool
 *  
 */
 
	//Retrieves query string variable value
	function getQueryStringValue(ji) {
		//get query string
		hu = window.location.search.substring(1);
		//Split up GET variables into array
		gy = hu.split("&");
		
		//Loop through query string, search for GET variable
		for (i=0;i<gy.length;i++) {
			ft = gy[i].split("=");
			if (ft[0] == ji) {
				return ft[1];
			}
		}
	}
 
 
	function updateSyncStatus (reedId,serverId,successful) {
		var success = document.getElementById('syncStatusSuccessful').src;
		var fail = document.getElementById('syncStatusFail').src;
		
		if (successful == true) {
			var reedImg = document.getElementById('syncStatus' + reedId);
			reedImg.src = success;
		}
		else {
			document.getElementById('syncStatus' + reedId).src = fail;
			var failUrl = "reedDataSyncProcess.cfm?reedId=" + reedId + "&serverId=" + serverId + "&process=d";
			$.ajax({
				type: "GET",
				url: failUrl
			});
		}
	}
	
	function openSyncConfirmDialog(reedId,reedName,serverName) {
		
	}
 
	// For kicking off the sync process
	function reedSyncLaunch(reedId, serverId) {
		var r=confirm("Do you wish to sync this REED and all of it's attached elements to the Production Server? Clicking OK, will kick off the process. Please wait until you are notified of the results.");
		var processUrl = "reedDataSyncProcess.cfm?reedId=" + reedId + "&serverId=" + serverId + "&process=i";
		if (r==true) {
			//OK
			$.ajax({
				type: "GET",
				url: processUrl,
				success: function(msg){
					alert( "REED Synced.");
					updateSyncStatus (reedId,serverId,true);
				},
				error: function(msg){
					alert( "REED Could Not be synced. Please try again later. " );
					updateSyncStatus (reedId,serverId,false);
				}
			});

		}
		else {
		  //NO 
		  
		}
	}
 
	//For location button in grid view in location data sections
	function launchMapPoint(elementId, ajaxURL) {
		//Load data via AJAX
		//$('#safLocationWindow').load(ajaxURL, 'GET', showMapWindow() );
		alert(ajaxURL);
		$('#ajaxMapTesting').load(ajaxURL );
		
		//Load window
		
	}
	function showMapWindow() {
		$('#safLocationWindow').jqmShow();
	}
 
	//Date Validation
	function isDate(txtDate){  
		var objDate;  // date object initialized from the txtDate string  
		var mSeconds; // milliseconds from txtDate  

		// date length should be 10 characters - no more, no less  
		if (txtDate.length != 10) return false;  

		// extract day, month and year from the txtDate string  
		// expected format is mm/dd/yyyy  
		// subtraction will cast variables to integer implicitly  
		var day   = txtDate.substring(3,5)  - 0;  
		var month = txtDate.substring(0,2)  - 1; // because months in JS start with 0  
		var year  = txtDate.substring(6,10) - 0;  

		// third and sixth character should be /  
		if (txtDate.substring(2,3) != '/') return false;  
		if (txtDate.substring(5,6) != '/') return false;  

		// test year range  
		if (year < 999 || year > 3000) return false;  

		// convert txtDate to the milliseconds  
		mSeconds = (new Date(year, month, day)).getTime();  

		// set the date object from milliseconds  
		objDate = new Date();  
		objDate.setTime(mSeconds);  

		// if there exists difference then date isn't valid  
		if (objDate.getFullYear() != year)  return false;  
		if (objDate.getMonth()    != month) return false;  
		if (objDate.getDate()     != day)   return false;  

		// otherwise return true  
		return true;  
	}  



//Function to display loading for ajax
function displayLoading(elementId) {
	document.getElementById(elementId).innerHTML = "<div class='loadingajax'><img src='/images/loading.gif'></div>";
}

function setDisableEWFFaultParams(baseElementName,counterElementId, disableStatus) {
	var count = document.getElementById(counterElementId).value;
	for (i=1; i<=count; i++) {
		var element = document.getElementById(baseElementName + i).disabled = disableStatus;
	}
}

//Disables a group of html form elements by element name
function disableFormElements(formElementName,formName,disableStatus) {
	var count = document.getElementById(formName).elements.length;
	for (i=0; i<count; i++) 
	  {
	var element = document.getElementById(formName).elements[i]; 

		if (element.name == formElementName) 
			{ 
				if (disableStatus == true) {
					element.disabled=true;
				}
				else {
					element.disabled=false; 
				}
			} 
			
	  }
}


function disableAllFormElements(formName) {
	var count = document.getElementById(formName).elements.length;
	for (i=0; i<count; i++) 
	  {
		var element = document.getElementById(formName).elements[i]; 
		element.disabled=true;
			
	  }
}

//enables all html form elements by form name
function enableAllFormElements(formName) {
	var count = document.getElementById(formName).elements.length;
	for (i=0; i<count; i++) 
	  {
		var element = document.getElementById(formName).elements[i]; 
		element.disabled=false;
			
	  }
}


//Submits form by element id
function autoSubmitForm(formId) {
	document.getElementById(formId).submit();
}
function isFieldNotBlankByName (formElementName) {
	var returnValue = true;
	var elementCount = document.getElementsByName(formElementName).length;
	var element = document.getElementsByName(formElementName);
	for(i=0;i<elementCount;i++) {
		fieldValue = element[i].value;
		if (fieldValue == "") {
			returnValue = false;
		}
		
	}
	return (returnValue);
}


function goToURL(url) {
	document.location.href=url;
}

function checkBoxValue(formElementName,formName,value,checkStatus) {
	var count = document.getElementById(formName).elements.length;
	for (i=0; i<count; i++) 
	  {
		var element = document.getElementById(formName).elements[i]; 
		var elementValue = element.value;
		if (element.name == formElementName && elementValue==value) 
			{ 
				if(checkStatus == true) {
					element.checked=true; 
				}
				else {
					element.checked=false;
				}
			} 
	  }
}

/*
Used for REED Builder User interface
	- When a user selects an output file, this function will check the file trigger array and update a trigger selection
*/

function isFieldNotBlank (formElementId, errorMsg) {

	fieldValue = document.getElementById(formElementId).value;
	
	if (fieldValue == "") {
		if (errorMsg != "") {
			alert(errorMsg);
		}
		return (false);
	}
	else {
	
		return (true);
	}
}


function reedBuilderIsFieldSpecified(formName, formElementName) {

	var count = document.getElementById(formName).elements.length;
	var throwError = true;
	for (i=0; i<count; i++) {
	
		var element = document.getElementById(formName).elements[i]; 
		if (element.name == formElementName) {
			//Until an element is found checked, an error will be thrown
			var elementStatus = element.checked;	
			
			if (elementStatus == true) {
				var throwError = false;
			}
			
		}
	
	}
	
	if(throwError == false) {
		return (true);
	}
	else {
		alert('Please select a Connection Information Section below.');
		return (false);
		
	}
}

function checkFieldValue(formElementId, lower, upper, errorMsg) {
	
	fieldValue = document.getElementById(formElementId).value;
	//Check field characters before continueing
	var validChars = IsValidDec(formElementId,errorMsg);
	
	if (validChars == false) {
	return false;
	}
	else {
		if (fieldValue > upper) {
			if (errorMsg == '') {
			}
			else {
				alert(errorMsg);
				
			}
		return false;	
		}
		
		if (fieldValue < lower) {
			if(errorMsg == '') {
			}
			else{
				alert(errorMsg);
			}
		return false;
		}
	}

}

function checkToHide(checkElementId, affectedElementId) {

	checkStatus = document.getElementById(checkElementId).checked;
	if (checkStatus == true) {
		document.getElementById(affectedElementId).style.display = 'none';
	}
	else {
		document.getElementById(affectedElementId).style.display = '';
	}

}

function checkToShow(checkElementId, affectedElementId) {

	checkStatus = document.getElementById(checkElementId).checked;
	if (checkStatus == true) {
		document.getElementById(affectedElementId).style.display = '';
	}
	else {
		document.getElementById(affectedElementId).style.display = 'none';
	}

}

function checkToReadOnly(checkElementId, affectedElementId) {
	checkStatus = document.getElementById(checkElementId).checked;
	if (checkStatus == true) {
		document.getElementById(affectedElementId).readOnly = true;
	}
	else {
		document.getElementById(affectedElementId).readOnly = false;
	}
}

function checkToRead(checkElementId, affectedElementId) {
	checkStatus = document.getElementById(checkElementId).checked;
	if (checkStatus == true) {
		document.getElementById(affectedElementId).readOnly = false;
	}
	else {
		document.getElementById(affectedElementId).readOnly = true;
	}
}

function checkToDisable(checkElementId, affectedElementId) {
	checkStatus = document.getElementById(checkElementId).checked;
	if (checkStatus == true) {
		document.getElementById(affectedElementId).disabled = true;
	}
	else {
		document.getElementById(affectedElementId).disabled = false;
	}
}

function checkToEnable(checkElementId, affectedElementId) {
	checkStatus = document.getElementById(checkElementId).checked;
	if (checkStatus == true) {
		document.getElementById(affectedElementId).disabled = false;
	}
	else {
		document.getElementById(affectedElementId).disabled = true;
	}
}

function autoDisableFormElements(formElementName,formName) {

	var count = document.getElementById(formName).elements.length;
	
	for (i=0; i<count; i++) {
		var element = document.getElementById(formName).elements[i]; 
		if (element.name == formElementName) {
			
			//Check if field was checked, then loop through and disable all elements except the checked field
			var elementStatus = element.checked;
			
			if (elementStatus == true) {
			
				var checkedElementId = element.id;
				//disable all elements except for the checked element
				for(x=0;x<count;x++) {
					var element2 = document.getElementById(formName).elements[x];
					
					if(element2.name == formElementName) {
						
						if(element2.id == checkedElementId) {
							element2.disabled=false;
						
						}
						else {
							element2.disabled=true;
						
						}
					
					}
				
				}
			}
			
		} 
			
	}
}

function checkDropDownSelection(actualCountElementId,elementIdToCheck,elementIdBase,countStart,errorMsg) {
	
	var elementCount = document.getElementById(actualCountElementId).value;
	var elementValue = document.getElementById(elementIdToCheck).value;
	var returnValue = true;
	if (countStart == 0) {
		elementCount = elementCount - 1;
	}
	for(i=countStart;i<=elementCount; i++) {
		var tempElementId = elementIdBase + i;
		var tempValue = document.getElementById(elementIdBase + i).value;
		if (elementValue == tempValue && elementIdToCheck != tempElementId) {
			alert(errorMsg);
			returnValue = false;
			break;
		}
	}
	return (returnValue);
}

function reedEditorOnlyOne(formName,formElementName,defId,selectedElementId) {

	var checkStatus = document.getElementById(selectedElementId).checked;
	
	//disable all except for the value selected
	var count = document.getElementById(formName).elements.length;
	for (i=0; i<count; i++) {
		var element = document.getElementById(formName).elements[i]; 
		//Check Element Name
		if (element.name == formElementName) { 
			
			if(element.value == defId) {
				element.disabled=false; 
			}
			else {
				//If the specified check box was selected, disable all others. If it was de-selected, enable all others.
				if (checkStatus == true) {
					element.disabled=true; 
				}
				else {
					element.disabled=false; 
				}
			}
		
		} 
			
	}

}

function detectBrowser() {
	var browser=navigator.appName;
	var b_version=navigator.appVersion;
	var version=parseFloat(b_version);

	return (browser);
}

function reedEditorIEFix(elementId) {
	

}


function reedEditorFieldVal(selectedElementName,selectedElementId,elementName,formId,fileType,defId,fileTriggers) {
// Pending on what type of field do different validations
switch(fileType) {
	//SAF
	case 2:
		fileTriggerCheck(selectedElementId,elementName,formId,fileType,defId,fileTriggers);
		reedEditorOnlyOne(formId,selectedElementName,defId,selectedElementId);
		//Check if browser is IE, re-enable the checkbox...
		break;
		
	//EWF
	case 3:
		fileTriggerCheck(selectedElementId,elementName,formId,fileType,defId,fileTriggers);
		reedEditorOnlyOne(formId,selectedElementName,defId,selectedElementId);
		break;
		
	//DHF
	case 4:
		fileTriggerCheck(selectedElementId,elementName,formId,fileType,defId,fileTriggers);
		break;
	
	//SMF
	case 5:
		fileTriggerCheck(selectedElementId,elementName,formId,fileType,defId,fileTriggers);
		break;
		
	//SMF
	case 6:
		fileTriggerCheck(selectedElementId,elementName,formId,fileType,defId,fileTriggers);
		break;
		
	//Output Header
	case 9:
		reedEditorOnlyOne(formId,selectedElementName,defId,selectedElementId);
		break;
		
	//Connection Info
	case 99:
		reedEditorOnlyOne(formId,selectedElementName,defId,selectedElementId);
		break;
}

}

function isValidDecBlankOk(elementId,invalidValuesMsg) {
	var sText = document.getElementById(elementId).value;
	var valueLength = sText.length;
	var ValidChars = "0123456789.-";
	var negUsed = false;
	var negPos;
	var ptUsed = false;
	var ptPos;
	var IsNumber=true;
	var Char;
	if (valueLength == 0) {
		IsNumber = true;		
	}
	else {
		for (i = 0; i < sText.length && IsNumber == true; i++) {
			Char = sText.charAt(i); 
			if (ValidChars.indexOf(Char) == -1) {
				IsNumber = false;
				if (invalidValuesMsg == '') {
					alert("Invalid characters for this hex valued field. Only characters 0 - 9 and '.' are permitted.");
				}
				else {
					alert(invalidValuesMsg);
				}
			}
			
			//Check if decimal point is already used
			if (ValidChars.indexOf(Char) == 10 && ptUsed == true ) {
				alert("Only one decimal point allowed for a decimal value.");
				IsNumber = false;
			}
			else if (ValidChars.indexOf(Char) == 10 && ptUsed == false){
				ptUsed = true;
				ptPos = i;
				
				//Check position of decimal point: make sure decimal is not before the negative sign
				if (negPos != null) {
					if (ptPos < negPos) {
						alert(invalidValuesMsg + ": The decimal point cannot be stated before the negative sign.");
					}
				
				}
				
				
			}
			
			//Check if negative sign is already used
			if (ValidChars.indexOf(Char) == 11 && negUsed == true) {
				alert(invalidValuesMsg + ": Only one negative sign allowed for a decimal value.");
				IsNumber = false;
			}
			else if (ValidChars.indexOf(Char) == 11 && negUsed == false){
				negUsed = true;
				negPos = i;
				
				//Check position of negative sign: Can only be at position 0
				if (i != 0) {
					alert (invalidValuesMsg+ ": The negative sign can only be at the beginning of a number value.");
				
				}
				
			}
			
			
			

			
			
		}
	}
   return IsNumber;
}


function IsValidDec(elementId,invalidValuesMsg) {
	var sText = document.getElementById(elementId).value;
	var valueLength = sText.length;
	var ValidChars = "0123456789.-";
	var negUsed = false;
	var negPos;
	var ptUsed = false;
	var ptPos;
	var IsNumber=true;
	var Char;
	if (valueLength == 0) {
		IsNumber = false;
		if (invalidValuesMsg == '') {
			alert("Invalid characters for this hex valued field. Only characters 0 - 9 and '.' are permitted.");
		}
		else {
			alert(invalidValuesMsg);
		}			
	}
	else {
		for (x = 0; x < sText.length && IsNumber == true; x++) {
			Char = sText.charAt(x); 
			if (ValidChars.indexOf(Char) == -1) {
				IsNumber = false;
				if (invalidValuesMsg == '') {
					alert("Invalid characters for this hex valued field. Only characters 0 - 9 and '.' are permitted.");
				}
				else {
					alert(invalidValuesMsg);
				}
			}
			
			//Check if decimal point is already used
			if (ValidChars.indexOf(Char) == 10 && ptUsed == true ) {
				alert("Only one decimal point allowed for a decimal value.");
				IsNumber = false;
			}
			else if (ValidChars.indexOf(Char) == 10 && ptUsed == false){
				ptUsed = true;
				ptPos = x;
				
				//Check position of decimal point: make sure decimal is not before the negative sign
				if (negPos != null) {
					if (ptPos < negPos) {
						alert(invalidValuesMsg + ": The decimal point cannot be stated before the negative sign.");
					}
				
				}
				
				
			}
			
			//Check if negative sign is already used
			if (ValidChars.indexOf(Char) == 11 && negUsed == true) {
				alert(invalidValuesMsg + ": Only one negative sign allowed for a decimal value.");
				IsNumber = false;
			}
			else if (ValidChars.indexOf(Char) == 11 && negUsed == false){
				negUsed = true;
				negPos = x;
				
				//Check position of negative sign: Can only be at position 0
				if (x != 0) {
					alert (invalidValuesMsg+ ": The negative sign can only be at the beginning of a number value.");
				
				}
				
			}
			
			
			

			
			
		}
	}
   return IsNumber;
}

function IsValidPid(elementId,bytes,invalidBytesMsg,invalidValuesMsg) {
	var sText = document.getElementById(elementId).value;
	var valueLength = sText.length;
	var maxBytes = bytes * 2;
	var ValidChars = "abcdefABCDEF0123456789";
	var IsNumber=true;
	var Char;
	var decValue = parseInt(sText,16);
	
	
	if (valueLength <= maxBytes && valueLength != 0) {
		for (i = 0; i < sText.length && IsNumber == true; i++) {
			Char = sText.charAt(i); 
			if (ValidChars.indexOf(Char) == -1) {
				IsNumber = false;
				if (invalidValuesMsg == '') {
					alert("Invalid characters for this hex valued field. Only characters A - F and 0 - 9 are permitted.");
				}
				else {
					alert(invalidValuesMsg);
				}
			}
			else {
			
				//Validate values greater than 255
				if (decValue > 255) {
					//check if ff's are in front
					if(i == 0 || i == 1) {
						if (ValidChars.indexOf(Char) != 11 && ValidChars.indexOf(Char) != 5) {
							IsNumber = false;
							alert('Invalid PID value. PIDs greater than 255, must have 255 set for the first byte.');
							break;
						}
					
					}
				}
			}
			
			
			
			
			
			
		}
	}
	else if (valueLength == 0) {
		IsNumber = false;
		alert(invalidValuesMsg);
	}
	else {
		IsNumber = false;
		if (invalidBytesMsg == '') {
			IsNumber = false;
			alert("Invalid number of bytes for this hex valued field. The max number of bytes allowed for this field is: " + bytes);
		}
		else {
			IsNumber = false;
			alert(invalidBytesMsg);
		}
	}
	
   return IsNumber;
}

//Checks if a field value is valid HEX by element Id.
function IsValidHex(elementId,bytes,invalidBytesMsg,invalidValuesMsg) {
	var sText = document.getElementById(elementId).value;
	var valueLength = sText.length;
	var maxBytes = bytes * 2;
	var ValidChars = "abcdefABCDEF0123456789";
	var IsNumber=true;
	var Char;
	if (valueLength <= maxBytes && valueLength != 0) {
		for (i = 0; i < sText.length && IsNumber == true; i++) {
			Char = sText.charAt(i); 
			if (ValidChars.indexOf(Char) == -1) {
				IsNumber = false;
				if (invalidValuesMsg == '') {
					alert("Invalid characters for this hex valued field. Only characters A - F and 0 - 9 are permitted.");
				}
				else {
					alert(invalidValuesMsg);
				}
			}
		}
	}
	else if (valueLength == 0) {
		IsNumber = false;
		alert(invalidValuesMsg);
	}
	else {
		IsNumber = false;
		if (invalidBytesMsg == '') {
			alert("Invalid number of bytes for this hex valued field. The max number of bytes allowed for this field is: " + bytes);
		}
		else {
			alert(invalidBytesMsg);
		}
	}
	
   return IsNumber;
}

//Function that checks array of all output files that contain triggers. If the clicked output file has a trigger, the trigger will automatically be checked
function fileTriggerCheck(selectedElementId,elementName,formId,fileType,defId,fileTriggers) {

	var checkStatus = document.getElementById(selectedElementId).checked;
	var count = fileTriggers.length;
	
	//Check if file triggers array has been populated or not.
	if (count > 0) {
	
		//Loop through array for any matches
		for (i=0;i<count;i++) {
		
			//Check File type
			var arrayFileType = fileTriggers[i][0];
			
			//If file Type Matches
			if(arrayFileType == fileType) {
				var arrayDefId = fileTriggers[i][1];
				
				
				//If Definition Id matches return the trigger Id and update the trigger
				if (arrayDefId == defId) {
					var triggerDefId = fileTriggers[i][2];
					if (checkStatus == true) {
						document.getElementById("triggers" + triggerDefId).checked=true;
					}
					else {
						
						//Double Check to make sure no other files are using this trigger. If other files are, do not uncheck the trigger
						var uncheck = true;
						for(x=0;x<count;x++) {
					
							var triggerId = fileTriggers[x][2];
							
							if(triggerId == triggerDefId) {
								//Check to see if the value is checked. If not checked, OK. If Checked, Not OK
								var tempFileType = fileTriggers[x][0];
								var tempDefId = fileTriggers[x][1];
								
								// Switch through the file types and grab the appropriate value
								switch(tempFileType) {
									case 2:
										var tempFileValue=document.getElementById("SAF" + tempDefId).checked;
										break;
									case 3:
										var tempFileValue=document.getElementById("EWF" + tempDefId).checked;
										break;
									case 4:
										var tempFileValue=document.getElementById("DHF" + tempDefId).checked;
										break;
									case 5:
										var tempFileValue=document.getElementById("SMF" + tempDefId).checked;
										break;
									case 6:
										var tempFileValue=document.getElementById("ECF" + tempDefId).checked;
										break;
								}
								
								if (tempFileValue == true) {
									//alert('dont uncheck it dbag');
									uncheck = false;
								}
							}
						}
						//If no other files are using this trigger proceed...
						if(uncheck == false) {
						}
						else {
							document.getElementById("triggers" + triggerDefId).checked=false;
						}
					}
					
				}
			
			
			}

		}
	}
	else {
		// do nothing, if file triggers array is not populated
	}
	

}

//Check for valid chars
function isValidChars(elementId,errorMsg,validChars) {
	var sText = document.getElementById(elementId).value;
	var valueLength = sText.length;
	var IsValid=true;
	var Char;
	// Check if valid characters...
	if (validChars.length != 0) {
		// Check if lenght of value is greater than 0
		if (valueLength != 0) {
			//check value for valid characters
			for (i = 0; i < sText.length && IsValid == true; i++) {
				Char = sText.charAt(i); 
				//Invalid characters found. Return Error
				if (validChars.indexOf(Char) == -1) {
					IsValid = false;
					if (errorMsg == '') {
						alert("Invalid characters for this field.");
					}
					else {
						alert(errorMsg);
					}
				}
			}
		}
		//Value is blank, return error message
		else if (valueLength == 0) {
			IsValid = false;
			alert(errorMsg);
		}
	}
	//If no valid characters specified, then all is ok...
	else {	
	
	}
   return IsValid;
}

