function wndSetHeight(sender, e)
{
	var viewportheight = 780;
	if (typeof window.innerWidth != 'undefined')
	{
		viewportheight = window.innerHeight;
	}
	else if (typeof document.documentElement != 'undefined'
	&& typeof document.documentElement.clientWidth != 'undefined'
	&& document.documentElement.clientWidth != 0)
	{
		viewportheight = document.documentElement.clientHeight;
	}
	var height = sender.get_height();
	if (height > viewportheight - 10)
	{
		sender.set_height(viewportheight - 10);
		//sender.set_height(500);
		sender.center();
	}
}

function fValRepCode(src, args)
{
	args.IsValid = args.Value.length == 3 || args.Value.length == 10;
}


function fValRepID(src, args)
{
	args.IsValid = args.Value.length == 3;
}

//replaces getElementById which is hamstrung by .NET's naming container id rewrites
//ignore second argument in normal use
function findElementById(elemId, elem)
{
	//TODO: ****************this uses a hardcoded string which seems to work for now but EVERYTHING WILL BREAK if MS changes the way INaming containers generate ids.
	var element;
	var namespaces = new Array
    (
			"ctl00_PgContent_",
			"ctl00_GTTPageContentPlaceHolder_",
			"ctl00_ctl00_BodyPlaceHolder_content_",
			"ctl00_BodyPlaceHolder_",
			"ctl00_",
			"_ctl0_GTTPageContentPlaceHolder_",
			"_ctl0__ctl0_BodyPlaceHolder_content_",
			"_ctl0_BodyPlaceHolder_"
		);

	element = document.getElementById(elemId);

	for (i = 0; i < namespaces.length && !element; i++)
	{
		element = document.getElementById(namespaces[i] + elemId);
	}

	return element;

	/*
	//Here lies a recursive find by regex way of finding elements which is safer.. but really slow.
	if(!elem)
	elem = document;
    
	//alert(elemId+":"+elem.id+":"+elem.nodeName+":"+elem.childNodes.length);
	if(elem.id)
	{
	reg = new RegExp("_"+elemId+"$");
	if(elem.id.match(reg))
	return elem;
	}
    
	for(var i=0;i<elem.childNodes.length;i++)
	{
	found = findElementById(elemId,elem.childNodes[i]);    
	if(found)
	return found;
	}
	//looped through all children, didn't find it.
	return null;
	*/
}

function Source_Copy()
{
	if (!removeSelDashes())
		return;
	event.returnValue = false;
}

function getSel()
{
	if (document.getSelection) txt = document.getSelection();
	else if (document.selection) txt = document.selection.createRange().text;
	else return;

	return txt;
}

function removeSelDashes()
{
	var selected = getSel();
	selected = trimAll(selected);
	if (selected.length != 12 && selected.length != 17)
		return;

	var parsedValue = selected.split("-");
	var val;

	if (selected.length == 12)
	{
		if (parsedValue.length != 3)
			return false;
		val = parsedValue[0] + parsedValue[1] + parsedValue[2];
	}
	else if (selected.length == 17)
	{
		if (parsedValue.length != 4)
			return false;
		val = parsedValue[0] + parsedValue[1] + parsedValue[2] + parsedValue[3];
	}

	window.clipboardData.setData("Text", val);
	return true;
}

function trimAll(sString)
{
	while (sString.substring(0, 1) == ' ')
	{
		sString = sString.substring(1, sString.length);
	}
	while (sString.substring(sString.length - 1, sString.length) == ' ')
	{
		sString = sString.substring(0, sString.length - 1);
	}
	return sString;
}

function isDate(strDate)
{
	var parsedDate = strDate.split("/");
	if (parsedDate.length != 3)
	{
		parsedDate = strDate.split("-");
		if (parsedDate.length != 3)
			return false;
	}

	var day, month, year;
	month = parsedDate[0];
	day = parsedDate[1];
	year = parsedDate[2];

	if (year.length == 2)
		if (typeof (Number(year)) == "number")
		year = "20" + year;
	else
		return false;

	strDate = month + "/" + day + "/" + year

	var objDate = new Date(strDate);
	if (month != objDate.getMonth() + 1) return false;
	if (day != objDate.getDate()) return false;
	if (year != objDate.getFullYear()) return false;

	return true;
}

// abandoned this, not worth time...
function isDateNotFuture()
{
	var strDate = document.getElementById('etxtDateEff').value;
	if (!isDate(strDate))
		return false;

	var enteredDate = new Date(strDate);
	var thisDate = new Date();
	var nowJustDate = new Date();
	nowJustDate.setYear(getYear(thisDate));
	nowJustDate.setMonth(getMonth(thisDate));
	nowJustDate.setDate(getDate(thisDate));
	if (enteredDate < nowJustDate)
		return false;

	return true;
}

//2006-08-29 RSK - custom validation for first call date on the service usage report for cliff
//When enters = for first call date, he gets a report with all blank first call dates.
function fValFirstCallDate(src, args)
{
	args.IsValid = isDate(args.Value) || args.Value == '=';
}

function fMoveOnIfFull(control, nextControlID, e)
{
	if (control.value.length >= (control.maxLength) && !RegExp('^(0|8|9|16|17|18|37|38|39|40|46)$').test(e.keyCode))
	{
		eval('control.form.' + nextControlID + '.focus();');
	}
}

// set the display style for a panel, and enable or disable its validators
// needed when there are multiple panels on a page, sonme displayed, some not, and all have validators
function fDivAndValidatorsEnable(divID, bEnable)
{
	var div = findElementById(divID);

	if (bEnable)
		div.style.display = "";
	else
		div.style.display = "none";

	// could also use a similar technique to disable the controls in a div
	//var tagNames = ['button', 'input', 'textarea', 'select' ];
	var tagNames = ['span'];
	var i = tagNames.length
	var j, tagCollection;
	var elementArray = [];
	while (i--)
	{
		tagCollection = div.getElementsByTagName(tagNames[i]);
		j = tagCollection.length;
		while (j--)
		{
			// just to be sure this is a validator, we look for a certain property
			if (tagCollection[j].errormessage)
				ValidatorEnable(tagCollection[j], bEnable)
		}
	}
}

// used by more than one combo control
function ItemsLoaded(combo)
{
	//combo.Enabled = true;
	if (combo.Items.length > 0)
	{
		combo.SetText('Select...');
	}
	else
	{
		combo.SetText('No items found.');
	}
}


// was used by CustEdit and CustTrunk - requires two hidden fields
// now in the Master Page header
function fValCredit(src, args)
{
	src.errorMessage = '';
	var msgPrefix = 'Under \'Account Information\', ';
	var url = window.location;
	var bTrunkPage = true;
	if (url.href.indexOf("CustTrunk.aspx") == -1)
	{
		msgPrefix = '';
		bTrunkPage = false;
	}

	args.IsValid = RegExp('^\\s*-*\\d+\\s*$').test(args.Value);
	if (!args.IsValid)
	{
		src.innerHTML = 'Credit Limit must be a whole number - no decimals';
		src.errormessage = msgPrefix + 'Credit Limit must be a whole number - no decimals';
		return;
	}
	
	var hiddenMin = bTrunkPage ? 'hiddenMinCreditTrunk' : 'hiddenMinCredit'
	var hiddenMax = bTrunkPage ? 'hiddenMaxCreditTrunk' : 'hiddenMaxCredit'
	var min = parseInt(findElementById(hiddenMin).value);
	var max = parseInt(findElementById(hiddenMax).value);
	var cred = parseInt(ltrim(rtrim(args.Value)));
	args.IsValid = (cred <= max && cred >= min);
	if (!args.IsValid)
	{
		src.innerHTML = 'Credit Limit must be between ' + min + ' and ' + max;
		src.errormessage = msgPrefix + 'Credit Limit must be between ' + min + ' and ' + max;
	}
}


// Javascript trim, ltrim, rtrim  http://www.webtoolkit.info/

function trim(str, chars)
{
	return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars)
{
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars)
{
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

/*Current date script credit: 
JavaScript Kit (www.javascriptkit.com)
Over 200+ free scripts here!

var mydate=new Date()
var year=mydate.getYear()
if (year < 1000)
year+=1900
var day=mydate.getDay()
var month=mydate.getMonth()
var daym=mydate.getDate()
if (daym<10)
daym="0"+daym
var dayarray=new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday")
var montharray=new Array("January","February","March","April","May","June","July","August","September","October","November","December")
document.write("<small><font color='000000' face='Arial'><b>"+dayarray[day]+", "+montharray[month]+" "+daym+", "+year+"</b></font></small>")
*/

