/********************
 *
 *	JAVASCRIPT_STD.JS
 *	Standard/generic javascript for ITC
 * 
********************/

// Is IE flag
IsMSIE = navigator.appVersion.indexOf('MSIE') != -1;

// Gets a selected value from a <select> menu
function getSelObjVal(SelObj) {
	return SelObj[SelObj.selectedIndex].value;
}

// Opens a generic window with the provided parameters
function openGenWindow(FilePath, WindowOptions, CheckResToPassQueryStr, QueryStrToPass) {	
	window.open(FilePath, String(Math.random()).replace(/\./, ""),
	WindowOptions + getCenterForPopupWindow(WindowOptions));
}

// GET CENTER FOR WINDOW
function getCenterForPopupWindow(WindowOptions) {
	return ",left=" + getWindowCenterX(getVarsFromList(WindowOptions, "width")) + ",top=" + getWindowCenterY(getVarsFromList(WindowOptions, "height"));
}

// GET HORIZONTAL CENTER OF WINDOW
function getWindowCenterX(w) {
	w = (w)?w:document.body.clientWidth;
	return ((screen.width-w)/2);
}


// GET VERTICAL CENTER OF WINDOW
function getWindowCenterY(h) {
	h = (h || navigator.appName != "Microsoft Internet Explorer")?h:document.body.clientHeight;
	return ((screen.height-h)/2);
}


// GETS CERTAIN VARS FROM A LIST (seperated by commas with no comma at the end -- useful for grabbing vars from window.open options)
function getVarsFromList(VarList, GetVar) {

	IndexOfVar    = VarList.indexOf(GetVar + '=') + (GetVar.length + 1);
	CommaAfterVar = VarList.substr(IndexOfVar).indexOf(",");
	return (CommaAfterVar > 0)?VarList.substr(IndexOfVar, CommaAfterVar):VarList.substr(IndexOfVar);
}


// Creates a "custom" prompt() box because ***IE7 IS A STUPID, CRAPPY, NON-COMPLIANT PIECE OF A HOG MANURE THAT THINKS "PROMPTS" ARE
// SOMEHOW, IN MICROSOFT'S SKEWED AND LAX PERSPECTIVE ON SECURITY, IS SOME SORT OF "HAZZARD"
// EVERYTIME THEY UPDATE THEIR BROWSER, IT BECOMES THAT BIT CRAPPIER AND MAKES MY LIFE THAT BIT HARDER!!*** [/rant]
// Ahem...
// STRING question, STRING answer (default)
function custom_prompt(Question, DefaultAnswer, ExecCodeOnAnswer) {
	CSSArray = new Array();
	CSSArray['fontFamily'] = 'Tahoma';
	CSSArray['fontSize']   = '11px';
	CSSArray['fontWeight'] = 'normal';
	CSSArray['textAlign']  = 'left';
	CSSArray['width']      = '300px';
	CSSArray['border']     = '1px solid #000000';
	CSSArray['background'] = '#D4D0C8';
	CSSArray['padding']    = '5px';
	
	var NewAnswer = null;
	
	OverrideInnerHTML
	= Question + '<br>'
	+ '<input type="text" id="Answer" style=\"width: 295px\" style="font-family: \'Tahoma\'; font-size: 11px" value="'
	+ DefaultAnswer + '">'
	
	+ '<div style="text-align: center; margin-top: 15px">'
	+ '<input type="button" value="Cancel" onClick="deleteWaitDiv()" style="width: 80px">&nbsp;&nbsp;&nbsp;'
	+ '<input type="button" value="OK" style="width: 80px" onClick="if (document.getElementById(\'Answer\').value == \'\')'
	+ ' { deleteWaitDiv(); } else { NewAnswer = document.getElementById(\'Answer\').value; '
	+ 'if (!IsMSIE) { deleteWaitDiv(); } ' + ExecCodeOnAnswer + '; if (IsMSIE) { deleteWaitDiv(); } }">'
	+ '</div>';
	
	generateWaitDiv('', false, false, CSSArray, OverrideInnerHTML, true);
	document.getElementById('Answer').focus();
}



// GETS A SPECIFIED GET VARIABLE FROM A GIVEN OR CURRENT URL
function fetchGETVar(GETVar, OverrideURL) {
	
	// Figure out what URL to use and then parse out the unnecessary parts
	UseURL = (OverrideURL)?OverrideURL:document.location.href;
	if (UseURL.indexOf('?') != -1 && UseURL.indexOf(GETVar) != -1) {
		URLArray      = UseURL.split('?');
		QueryStrArray = URLArray[1].split('&');
		
		// Set array of get vars
		GETVarArray = new Array(QueryStrArray.length);
		
		// Set the array values
		for (i in QueryStrArray) {
			CurrentVarSplit = QueryStrArray[i].split('=');
			CurrentVarName  = CurrentVarSplit[0];
			CurrentVarValue = CurrentVarSplit[1];
			eval('GETVarArray[\'' + CurrentVarName + '\'] = CurrentVarValue;');
		}
		
		if (GETVar)
			return GETVarArray[GETVar];
	}
	else
		return null;
}


// TOGGLES THE CSS 'DISPLAY' PROPERTY BETWEEN 'none' AND 'block'
function toggleCSSdisplay(Obj) {
	CurrentDisplay = Obj.style.display;
	Obj.style.display = (CurrentDisplay == 'none' || CurrentDisplay == '')?'block':'none';		
}


// STRIPS OUT DUPLICATE VALUES FROM AN ARRAY
function JS_array_unique(PassArray) {

	var ReturnArray = new Array();
	for (var i in PassArray) {
		if (!in_array(PassArray[i], ReturnArray))
			ReturnArray.push(PassArray[i]);
	}
	
	return ReturnArray;
}


// SHOWS THE 'CHANGES SAVED' NOTE DIV	
function showSavedNote() {
	Obj = document.getElementById('ChangesSavedNote');
	Obj.className = 'ChangesSavedNote_on';
	
	setTimeout("Obj.className = 'ChangesSavedNote_off'", 5000);
}


// GETS THE ENTIRE QUERY STRING FROM THE CURRENT URL
function getQueryStr(StripFunctions) {
	CurrentURL = document.location.href;
	QueryStr   = CurrentURL.substr(CurrentURL.indexOf('?')+1);
	
	return QueryStr.replace(/[\:|\#]*.*/ig, '');
}


// ADDS LEADING ZERO TO A NUMBER
function JS_addLeadingZero(number) {
	var NewNumber;

	if (String(number).length == 1)
		NewNumber = ("0" + number);
	else
		NewNumber = number;

	return NewNumber;
}


// ASSIGNS A JAVASCRIPT EVENT TO A SPECIFIED OBJECT ACCORDING TO THE BROWSER
function setEvent(Obj, Event, Action) {
	
	// For IE, use attachEvent
	if (IsMSIE) {
		eval("Obj.attachEvent('" + Event.toLowerCase() + "', function() { " + Action + " });");
	}
	
	// For proper browsers, simply use setAttribute
	else
		Obj.setAttribute(Event, Action);
}


// APPEND QUERY STRING TO URL
function JS_appendQueryStr(OriginalURL, QueryStr) {
	if (OriginalURL.match(/\?/))
		return OriginalURL + "&" + QueryStr;
	else
		return OriginalURL + "?" + QueryStr;
}


// GENERATES A DIV CONTAINING A "PLEASE WAIT..." MESSAGE
function generateWaitDiv(OverrideText, GenerateOnlyDisableDiv, DoNotGenerateDisableDiv, CustomCSSArray, OverrideInnerHTML, DoNotAnimate) {

	if (!GenerateOnlyDisableDiv) {
		var NewDiv = document.createElement('div');
	
		if (!OverrideInnerHTML)
			var ContainedText = document.createTextNode(((OverrideText)?OverrideText:'Please Wait') + '...');
		
		with (NewDiv.style) {
			width         = '180px';
			position      = 'absolute';
			border        = '1px solid #BCBCFF';
			background    = '#EFEFFF';
			fontWeight    = 'bold';
			textAlign     = 'center';
			verticalAlign = 'middle';
			paddingTop    = '20px';
			paddingBottom = '20px';
			zIndex        = '1';
			
			// Override CSS...
			if (typeof CustomCSSArray == 'object') {
				for (CSSDirective in CustomCSSArray)
					eval(CSSDirective + ' = \'' + CustomCSSArray[CSSDirective] + '\'');
			}		
			
			ScrollTop = (IsMSIE)?document.body.scrollTop:document.documentElement.scrollTop;
			
			left = (getWindowDimension('x')/2) - ((parseInt(width)+20)/2) + 'px';
			top  = String(ScrollTop + parseInt((getWindowDimension('y')/2) -
			       (parseInt(paddingTop) + parseInt(paddingBottom)+10))) + 'px';
		}
		
		NewDiv.setAttribute('id', 'WaitDiv');
		
		if (!OverrideInnerHTML)
			NewDiv.appendChild(ContainedText);
	}	
	
	if (!DoNotGenerateDisableDiv) {
		var NewDisableDiv = document.createElement('div');
		
		with (NewDisableDiv.style) {
			top      = '0px';
			left     = '0px';
			width    = '100%';
			position = 'absolute';
			
			if (IsMSIE) {
				//background = "url('" + JS_http_path_to_provisioner + "/admin/images/images/space.gif')";
				toggleSelectMenuVisibility(true, 'hidden');
			}
		}
		
		NewDisableDiv.style.height = document.body.scrollHeight + 'px';
	}
	
	NewDisableDiv.setAttribute('id', 'DisableDiv');
	
	if (!GenerateOnlyDisableDiv) {
		if (OverrideInnerHTML)
			NewDiv.innerHTML = OverrideInnerHTML;

		document.body.appendChild(NewDiv);
	}
	
	document.body.appendChild(NewDisableDiv);
}


// DELETES WAIT DIV
function deleteWaitDiv(GenerateOnlyDisableDiv) {
	if (!GenerateOnlyDisableDiv)
		document.body.removeChild(document.getElementById('WaitDiv'));
	
	document.body.removeChild(document.getElementById('DisableDiv'));
	toggleSelectMenuVisibility(true, 'visible');
}


// GETS WINDOW DIMENSIONS
function getWindowDimension(Dim) {
	if (Dim == 'x')
		return (IsMSIE)?document.body.offsetWidth:window.innerWidth;
	else
		return (IsMSIE)?document.body.offsetHeight:window.innerHeight;
}


// OPENS A STD FORM
function openForm(FormScriptURL) {
	window.open(FormScriptURL, String(FormScriptURL).replace(/[^a-z]/gi), 'width=630,height=630,scrollbars,status,resizable');
}


// OPENS A STD DETAILS WINDOW
function detailsWin(ScriptURL, ParamsOverride) {
	WinName = Math.random().toString().replace(/\./ig, '');
	window.open(ScriptURL, WinName, (ParamsOverride)?ParamsOverride:'width=600,height=500,scrollbars,status');
}


// GETS THE NAME OF SCRIPT/PAGE FROM A URL
function getScriptName(OverrideURL, IncludeQueryStr) {
	UseURL         = (OverrideURL)?OverrideURL:document.location.href;
	UseURL         = UseURL.replace(/#.*/, '');
	QueryStrExists = UseURL.indexOf('?') != -1;
	
	QueryStr = '';

	if (QueryStrExists) {
		QueryStr = UseURL.substr(UseURL.indexOf('?'));
		UseURL   = UseURL.substr(0, UseURL.indexOf('?'));
	}
		
	if (!QueryStrExists || IncludeQueryStr)
		return UseURL.substr(UseURL.lastIndexOf('/')+1) + QueryStr;	
	
	else if (QueryStrExists)
		return UseURL.substr(UseURL.lastIndexOf('/')+1);
}


// CHECKS IF A VALUE EXISTS IN AN ARRAY AND OPTIONALLY RETURNS THE INDEX
function in_array(valueToMatch, arrayToCheck, ReturnIndex, CompareKeysNotValues) {
	
	NewArray = new Array();
	
	for (var i in arrayToCheck) {
		if (valueToMatch == ((CompareKeysNotValues)?i:arrayToCheck[i])) {
			if (ReturnIndex == 'array_values')
				NewArray.push(arrayToCheck[i]);
				
			else if (ReturnIndex == 'array_indexes')
				NewArray.push(i);
				
			else if (ReturnIndex == true)
				return i;
			
			else
				return true;
		}
	}
	
	if ((ReturnIndex != null && typeof ReturnIndex != 'boolean') || NewArray.length > 0)
		return NewArray;
	else
		return false;
}


// Toggles the CSS display value between 'none' and 'block'
function toggleCSSDisplay(ContainerID, Override) {
	ContainerObj = document.getElementById(ContainerID);
	
	ContainerObj.style.display =
	(Override)?Override:((ContainerObj.style.display == 'none' || ContainerObj.style.display == '')?'block':'none');
}


// Remove default value for form field
function removeDefaultFormFieldValue(obj, DefaultValue, Set) {

	if (!obj.value && Set)
		obj.value = DefaultValue;

	if (obj.value == DefaultValue && !Set)
		obj.value = "";
}
