//****INPUT TEXT BOX ****************************************************
function clearInput(input) {
	input.value = "";
}

//****SELECT BOX *******************************************************
function clearSelect(box) {
	for(var i = 0; i < box.options.length; i++) {
		box.options[0] = null;
	}
}
// remove the specific items
function removeItems(box,idxArr){
	var del = 0;
	for ( var j = 0; j < idxArr.length; j++ ) {
		box.options[idxArr[j]-del] = null;
		del++;
	}
}
// change values according to one single value
function changeAllValue(changer,changees) {
	if (changer.value != '') {
		if (typeof changees.length == 'undefined' || changees.length == 1 || typeof changees[0] == 'undefined' || typeof changees[0].name == 'undefined') {
			if (confirm('This will change all the values for "' + changees.name.replace(/_/g," ") + '".\n Are you sure?')) {
					// alert(changees[i].options);
					if (typeof changees.options != "undefined") {
						for(var k = 0; k < changees.options.length; k++) {
							if (changees.options[k].value == changer.value) {
								changees.value = changer.value;
								// break;
							}
						}
					} else {
						changees.value = changer.value;
					}			
			}
		} else {
			if (confirm('This will change all the values for "' + changees[0].name.replace(/_/g," ") + '".\n Are you sure?')) {
				for (i=0; i < changees.length; i++) {
					// alert(changees[i].options);
					if (typeof changees[i].options != "undefined") {
						for(var k = 0; k < changees[i].options.length; k++) {
							if (changees[i].options[k].value == changer.value) {
								changees[i].value = changer.value;
								// break;
							}
						}
					} else {
						changees[i].value = changer.value;
					}			
				}
			}
		}
		
	}
}
// change checkbox values according to one single value
function changeAllCheckBoxValue(chkChanger,chkChangees) {
	var action = 'unselect';
	if (chkChanger.checked == true) {
		action = 'select';
	}
	// if (confirm('This will ' + action + ' all of the "' + chkChangees[0].name.replace(/_/g," ") + '".\n Are you sure?')) {
	if (typeof chkChangees.length != "undefined" && chkChangees.length > 1) {
		for (i=0; i < chkChangees.length; i++) {
			chkChangees[i].checked = chkChanger.checked;
		}
	} else {
		chkChangees.checked = chkChanger.checked;
	}
	// }
}


/* Check against an Empty Field */
function preventEmptyField( fieldObject )
{
	if(fieldObject.value == "" || fieldObject.value == null)						// When empty field is found
	{
		alert("Please enter " + fieldObject.name);	// Alert user to enter value
		return false;								// terminate process
	}
	return true;
}

function preventEmptyField( fieldObject, objectName )
{
	if(fieldObject.value == "" || fieldObject.value == null)						// When empty field is found
	{
		alert("Please enter " + objectName);	// Alert user to enter value
		return false;								// terminate process
	}
	return true;
}

function checkLength( fieldObject, objectName, nLength ) {
	if( preventEmptyField( fieldObject, objectName ) ) {
		if ( fieldObject.value.length != nLength ) {
			alert(objectName + " must be " + nLength + " characters long.");
			return false;
		}
	}
	return true;
}


function validateFormat( fieldValue, pattern, fieldName ) {
	var matchPattern = new RegExp(pattern);
	if ( !matchPattern.test(fieldValue) ) {
		alert("Error: The format for " + fieldName + " is invalid.");
		return false;
	}	
	alert("Good Format");
	return true;
}

function selectAllLists( listObject ) {
	var len = listObject.length;
	for ( i = 0; i < len; i++ ) {
		listObject.options[i].selected = true;
	}
}

function unSelectAllLists( listObject ) {
	var len = listObject.length;
	for ( i = 0; i < len; i++ ) {
		listObject.options[i].selected = false;
	}
}


function checkRadio( radioObj ) {
	radioObj.checked = true;	

}

function exchangeItems(box1,box2) {
	var items = new Array();
	for ( var opt, i = 0; ( opt = box1.options[i] ); i++ ) {
		if ( opt.selected ) {
			removeBlankItem(box2);
			insertItem(opt,box2);
			items[items.length] = i;
		}
	}
	var del = 0;
	for ( var j = 0; j < items.length; j++ ) {
		box1.options[items[j]-del] = null;
		del++;
	}
}

//**** CUSTOM FUNCTIONS *********************************

function insertSelectedItemsToBox2(box1,aVal,delim,box2) {
   insertSelectedItemsToBox2(box1,aVal,delim,box2, true);
}

function insertSelectedItemsToBox2(box1,aVal,delim,box2, remove) {
	var idxArr = new Array();
	for ( var opt, i = 0; ( opt = box1.options[i] ); i++ ) {
		if ( opt.selected ) {
			removeBlankItem(box2);
			var val = opt.value + delim + aVal;
			var txt = opt.text + delim + aVal;
			// insertItem(opt,box2);
			
			insertValue4(val, txt, opt.value, ':', '0', box2);
			idxArr[idxArr.length] = i;
		}
	}
	if (remove) {
	 	removeItems(box1,idxArr);
	}
}


function insertSelectedItemsToBox3(box1,box2,box3,delim,box) {
	 insertSelectedItemsToBox3(box1,box2,box3,delim,box,false);
}

function insertSelectedItemsToBox3(box1,box2,box3,delim,box,remove) {
	var idxArr = new Array();
	for ( var opt1, i = 0; ( opt1 = box1.options[i] ); i++ ) {
		if ( opt1.selected ) {
			for ( var opt2, k = 0; ( opt2 = box2.options[k] ); k++ ) {
				if ( opt2.selected ) {
					for ( var opt3, j = 0; ( opt3 = box3.options[j] ); j++ ) {
						if ( opt3.selected ) {
							removeBlankItem(box);
							var val = opt1.value + delim + opt2.value + delim + opt3.value;
							var txt = opt1.text + delim + opt2.text + delim + opt3.text;
							insertValue4(val, txt, opt1.value + opt2.value, '|', '0,1', box);
							idxArr[idxArr.length] = i;
						}
					}
						
				}
			
			}
			
			
		}
	}
	if (remove) {
		removeItems(box1,idxArr);
	}
}



function insertItem(item,box) {
	var itemInBox = false;
	for ( var opt, i = 0; ( opt = box.options[i] ); i++ ) {
		if ( isSameOption(opt,item) ) itemInBox = true;
	}
	if (!itemInBox) {
		newOpt = new Option;
		newOpt.text = item.text;
		newOpt.value = item.value;
		box.options[box.options.length] = newOpt;
	}
}

function insertValue(value,box) {
	var itemInBox = false;
	for ( var opt, i = 0; ( opt = box.options[i] ); i++ ) {
		if ( opt.value == value ) itemInBox = true;
	}
	if (!itemInBox) {
		newOpt = new Option;
		newOpt.text = value;
		newOpt.value = value;
		box.options[box.options.length] = newOpt;
	}
}


function insertValue2(value,text,box) {
	var itemInBox = false;
	for ( var opt, i = 0; ( opt = box.options[i] ); i++ ) {
		if ( opt.value == value ) itemInBox = true;
	}
	if (!itemInBox) {
		newOpt = new Option;
		newOpt.text = text;
		newOpt.value = value;
		box.options[box.options.length] = newOpt;
	}
}

function insertValue3(value,uValue,delimiter,pos,box) {
	var itemInBox = false;
	for ( var opt, i = 0; ( opt = box.options[i] ); i++ ) {
		var valArr = opt.value.split(delimiter);
		var pArr = pos.split(",");
		var cVal = "";
		for (var k = 0; k < pArr.length; k++) {
			cVal = cVal + valArr[parseInt(pArr[k])];
		}
		cVal = cVal.replace(" ","");
		if (cVal == uValue) itemInBox = true;
	}
	if (!itemInBox) {
		newOpt = new Option;
		newOpt.text = value;
		newOpt.value = value;
		box.options[box.options.length] = newOpt;
	}
}

function insertValue4(value,txt,uValue,delimiter,pos,box) {
	var itemInBox = false;
	for ( var opt, i = 0; ( opt = box.options[i] ); i++ ) {
		var valArr = opt.value.split(delimiter);
		pos = "" + pos;
		if (pos.indexOf(",") == -1) {
			cVal = valArr[pos];
		} else {
			var pArr = pos.split(",");
			var cVal = "";
			for (var k = 0; k < pArr.length; k++) {
				cVal = cVal + valArr[parseInt(pArr[k])];
			}
			cVal = cVal.replace(" ","");
		}
		if (cVal == uValue) itemInBox = true;
		
		// alert(cVal + '\n' + uValue);
		
	}
	if (!itemInBox) {
		newOpt = new Option;
		newOpt.text = txt;
		newOpt.value = value;
		box.options[box.options.length] = newOpt;
	}
}



function removeItem(item,box) {
	for ( var opt, k = 0; ( opt = box.options[k] ); k++ ) {
		if ( isSameOption(opt,item) ) box.options[k] = null;
	}
}

function removeSelectedItems(box) {
	var len = box.options.length;
	var nDeleted = 0;
	for (var i = 0; i < len; i++) {
		if (box.options[i-nDeleted].selected) {
			box.options[i-nDeleted] = null;
			nDeleted++;
		}
	}
}

function removeBlankItem(box) {
	for ( var opt, i = 0; ( opt = box.options[i] ); i++ ) {
		if ( opt.value == '' ) box.options[i] = null;
	}
}

function clearBox(box) {
	var len = box.options.length;
	var del = 0;
	for ( var j = 0; j <= len; j++ ) {
		box.options[len-del] = null;
		del++;
	}
}

function isSameOption(opt1,opt2) {
	if (opt1.value == opt2.value) {
		return true;
	} 
	return false;
}


function makeArray(n) {
	this.length = n;
	return this;
}

//*************************************
//trim form fields
function trimForm( f )
{
	// Loop through all form elements	
	var elem, i = 0;
	while ( elem = f.elements[i++] )
	{
		if (elem.type == 'text' || elem.type == 'textarea') {
			trim(elem);
		}
	} // end of element loop
}

//***************************************
/* Trim the beginning and ending whitespaces */
function trim(fieldObject)
{
	var oldValue = fieldObject.value;					// set oldValue to the Tracking Number which was entered by user
	var validStartPosition = oldValue.search(/\S/);		// find the position of the first non-whitespace character
	oldValue = oldValue.substring( validStartPosition );// get rid of the beginning white spaces from oldValue
	var stringLength = oldValue.length;					// determine the stringLength of oldValue
	
	/* Loop through oldValue.  Find out if it's last charater is a whitespace.
		If so, decrease stringLength by one.  If not, end the loop.
		The resulting stringLength will just cover a Tracking number 
		without beginning and ending whitespaces. */
	for (i = 0; i < oldValue.length; i++)
	{
		if (oldValue.charAt(stringLength-1) == ' ')
			stringLength--;
		else
			break;
	}
	fieldObject.value = oldValue.substring(0,stringLength);	// set the fieldObject value to the valid value
}

//*****************************
function convertSelectToList(box,listField) {
	for ( var i = 0; i < box.options.length; i++ ) {
		if (box.options[i].value != '') {
			listField.value = listField.value + box.options[i].value + ',';
		}
	}
}
/********************************************************************/
function vNumber( field, type, lb, ub )
{
	var num  = ( type == 0 ) ? parseInt( field.value, 10 ) : parseFloat( field.value );
	lb       = setArg( lb, false );
	ub       = setArg( ub, false );
	var fail = Boolean( isNaN( num ) || num != field.value );
	if ( !fail )
	{
		switch( true )
		{
			case ( lb != false && ub != false ) : fail = !Boolean( lb <= num && num <= ub ); break;
			case ( lb != false ) : fail = Boolean( num < lb ); break;
			case ( ub != false ) : fail = Boolean( num > ub ); break;
		}
	}
	if ( fail )
	{
		alert('The number you entered for ' + formatName(field) + ' is not valid' );
		return false;
	}
	return true;
}
/***************************************************************************/
function formatName(o) {
	var wStr = (o.name) ? o.name : o.id;
	wStr = wStr.replace(/_/g," ");
	return wStr;
	}
// Generic argument setting method
function setArg( arg, def )
{
	return ( typeof arg == 'undefined' || arg == '' || arg == null ) ? def : arg;
}
/****************************************************************************/
function vTwoNums(field1,field2,result) {
	var f1 = parseFloat(field1.value);
	var f2 = parseFloat(field2.value);
	switch(result) { // 0 means two fields should be the same, -1 means field1 should be smaller, 1 means field2 should be greater
		case 0:
			if (f1 != f2) {
				alert('The number you entered for ' + formatName(field1) + ' must be the same as ' +  formatName(field2));
				return false;
			}
			break;
		case -1:
			if (!(f1 < f2)) {
				alert('The number you entered for ' + formatName(field1) + ' must be the smaller than ' +  formatName(field2));
				return false;
			}
			break;
		case 1:
			if (!(f1 > f2)) {
				alert('The number you entered for ' + formatName(field1) + ' must be the greater than ' +  formatName(field2));
				return false;
			}
			break;
		case 2: // greater or equal to
			if (!(f1 >= f2)) {
				alert('The number you entered for ' + formatName(field1) + ' must be the greater or equal to ' +  formatName(field2));
				return false;
			}
			break;
		
	}
	return true;	
}

function limitText(limitField, limitNum) {
	if (limitField.value.length > limitNum) {
		limitField.value = limitField.value.substring(0, limitNum);
	} 
}
