
var bottomSpace = '<img class="bottom-space" src="/images/x.gif" border="0" alt="0"/>';

ajaxLoading = function(elem) {
	var elem_ = typeof(elem) == 'string' ? $(elem) : elem;
	if (arguments.length == 2)
		{ $(elem_).html('<img src="/images/new/ajax-loader-trans.gif" alt="loading">'); }
	else
		{ $(elem_).html('<div align="center"><img src="/images/new/ajax-loader-trans.gif" alt="loading"></div>'); }
};

ajaxUpdateContainer = function(cont, responseCode, url, img) {
	var html = '<div style="text-align:center">';
	var imgCode = img!=null ? '&img='+img : '';
	$.ajax({
		url:'/userlevel_restricted.jsp?url=' + url + imgCode,
		success:function(html) { $(cont).html(html); }
	});
};

fillSelect = function(target, optionsArr) {
	var opts = (arguments.length == 3) ? arguments[2] : null;
	if($(target).find('optgroup').length>0) {$(target).html('');}

	var start = target.options.length;
	if (opts != null && opts.empty != null)
	{
		for (var i = target.options.length - 1; i >= 0; i--)
			{ target.options[i] = null; }
		start = 0;
	}

	for (var i = 0; i < optionsArr.length; i++)
	{
		if (typeof(optionsArr[i]) == 'undefined')
		{
			start--;
			continue;
		}

		target.options[start + i] = optionsArr[i];
		if (opts != null && opts.indexed != null)
			{ target.options[start + i].value = i; }
		target.options[start + i].selected = false;
	}

	if($('#List2').length > 0 && $('#List2 option').length == 0) { $('#List2').html('<optgroup label="select a category..."></optgroup>'); }
	if($('#List1').length > 0 && $('#List1 option').length == 0) { $('#List1').html('<optgroup label="select a type..."></optgroup>'); }

};


selectText = function(input) {
	var txt='';
	if (window.getSelection)
	{
		if ($.browser.msie)
			{ txt = window.getSelection(); }
		else
			{ txt = input.value.substring(input.selectionStart, input.selectionEnd); }
	}
	else
	{
		if (document.getSelection)
			{ txt = document.getSelection(); }
		else if (document.selection)
			{ txt = document.selection.createRange().text; }
	}
	return $.trim(txt);
};

function limitChars(elem, limit) {
	var text = $(elem).val();
	var textlength = text.length;
	var $limitmsg = $(elem).next('.limit-msg');
	if(textlength > limit)
	{
		$(elem).val(text.substr(0,limit));
		return false;
	}
	else
	{
		if($limitmsg.length>0) { $limitmsg.html('('+ (limit - textlength) +' characters remaining)'); }
		return true;
	}
};

urlParam = function(name) {
	var results = new RegExp('[\\?&]' + name + '([^&#]*)').exec(window.location.href);
	if(results == null) { return null; }
	return results[0].split(/=/)[1];
};

jQuery.preloadImages = function() {
  for(var i = 0; i<arguments.length; i++)
	  { $("<img>").attr("src", arguments[i]); }
};

formatDate = function(dtIn) {
	var m = dtIn.getMonth() + 1;
	/* if(m < 10) m = "0" + m; */
	var d = dtIn.getDate();
	/* if(d < 10) d = "0" + d; */
	var y = dtIn.getFullYear();
	return m + "/" + d + "/" + y;
};

/* tab functions */
switchJsTab = function(tabNavId, eventElem) {
	$('#'+ tabNavId +' .tabs-nav').find('td').removeClass('on');
	$($(eventElem).parents('td').get(0)).addClass('on');
};

disableJsTab = function(tabId) {
	var elem = $('#'+tabId);
	$(elem).addClass('disabled');
	$($(elem).parents('td').get(0)).addClass('disabled');
};

windowWidth = function() {

	var e=$(window).width();
	if(navigator.mozilla) { return e; }
	var d;
	if(window.innerHeight&&window.scrollMaxY) { d=window.innerWidth+window.scrollMaxX; }
	else
	{
		if(document.body.scrollHeight>document.body.offsetHeight)
			{ d=document.body.scrollWidth; }
		else
			{ d=document.body.offsetWidth; }
	}
	return d<e?d+20:e
};


nl2br = function(text) {
	text = escape(text);
	var re_nlchar = /\\n/g;
	if(text.indexOf('%0D%0A') > -1) { re_nlchar = /%0D%0A/g ; }
	else if(text.indexOf('%0A') > -1) { re_nlchar = /%0A/g ; }
	else if(text.indexOf('%0D') > -1){ re_nlchar = /%0D/g ; }
	return unescape( text.replace(re_nlchar,'<br />') );
};

detectBrowser = function() {
	if($.browser.msie && $.browser.version<=6)
	{
		alert(
			"Looks like you are using an older version Internet Explorer.\n\n"+
			"For best site performance we recommend using Mozilla Firefox.\n"+
			"The latest version can be found here: http://www.mozilla.com"
		);
	}
};


newWindow = function(href, winName) { /* OPTIONAL:, height, width, winOptions */
	var height = 500;
	var width = 600;
	var winOptions = 'scrollbars=yes,menubar=no,toolbar=no,resizable=yes,location=no';
	if(arguments.length >= 3) { height = arguments[2]; }
	if(arguments.length >= 4) { width = arguments[3]; }
	if(arguments.length >= 5) { winOptions = arguments[4]; }

	var remote = window.open(href, winName, 'height='+height+',width='+width+',' + winOptions);
	if(remote)
	{
		if (remote.opener == null) { remote.opener = window; }
		remote.focus();
	}
};


var sessionAliveGo = true;
sessionAlive = function() {
	/* start requests - halt keep alive just before actual server timeout (60 min) */
	sessionAliveReq(10 * 60 * 1000);
	setTimeout(function() { sessionAliveGo = false; }, 55 * 60 * 1000);
};
sessionAliveReq = function(delay) {
	/* run a keep alive every 9 mins  until halt is true */
	if(sessionAliveGo) { sessionAliveReqDelayed(delay); }
};
sessionAliveReqDelayed = function(delay) {
	setTimeout(function() {
		$.ajax({
			url:'/session_alive.jsp',
			success:function(ret) { sessionAliveReq(delay); },
			error:function (ret){ sessionAliveReq(delay); }
		});
	}, delay);
};


getMaxBacktestDate = function(secs) {
	/* max backtest date for user */
	var maxBackDateTmp = new Date();
	var maxBackDateTmp2 = new Date();
	var dtOffset = maxBackDateTmp2.getTimezoneOffset() * 60000;
	if(secs > 0) { maxBackDateTmp2.setTime(secs + dtOffset); }
	maxBackDateTmp.setFullYear(maxBackDateTmp2.getFullYear(), maxBackDateTmp2.getMonth(), maxBackDateTmp2.getDate() );
	return maxBackDateTmp;
};

dateRE = new RegExp("^\\d\\d?\/\\d\\d?\/\\d\\d(\\d\\d){0,1}$");
verifyDate = function(elem_id, submit) {
	var elem = typeof(elem_id) == 'string' ? $('#' + elem_id) : elem_id;
	try
	{
		var escapedVal = escape( $.trim($(elem).val()).replace(/ /g, '') );
		if( !dateRE.exec(escapedVal) ) { throw('Invalid date range.'); }


		var tmpDt = $.datepicker.parseDate('mm/dd/yy', $(elem).val());
		if( tmpDt > new Date() )
		{
			alert($(elem).val() + ' entered is a future date.\n\nSetting date to today\'s date.');
			$(elem).val(formatDate(new Date()));
			return true;
		}
	}
	catch (err)
	{
		alert('\'' + $(elem).val() + '\': '+  err + "\n\nPlease use MM/DD/YYYY date format.");
		$(elem).focus();
		return false;
	}
	return true;
};

dateRangeRE = new RegExp("^\\d\\d?\/\\d\\d?\/\\d\\d(\\d\\d){0,1}(-|%u2013)\\d\\d?\/\\d\\d?\/\\d\\d(\\d\\d){0,1}$");
officeCharsRE = new RegExp("u2013");/* escaped chars from ms office copy */
verifyDateRange = function(elem) {
	try
	{
		var fix = false;
		var err = null;
		var escapedVal = escape( $.trim($(elem).val()).replace(/ /g, '') );
		if( officeCharsRE.exec(escapedVal) ) { escapedVal = escapedVal.replace(/%u2013/, '-'); fix = true; }
		if( !dateRangeRE.exec(escapedVal) ) { throw('Invalid date range.'); }

		var dts = escapedVal.split('-');
		if( $.datepicker.parseDate('mm/dd/yy', $.trim(dts[0])) > new Date() )
			{ err = $.trim(dts[0]) + ' entered is a future date.\n\nUsing today\'s date.'; dts[0] = formatDate(new Date()); fix = true; }
		if( $.datepicker.parseDate('mm/dd/yy', $.trim(dts[1])) > new Date() )
			{ err = $.trim(dts[1]) + ' entered is a future date.\n\n Using today\'s date.'; dts[1] = formatDate(new Date()); fix = true; }
		if(fix) { $(elem.val($.trim(dts[0]) + ' - ' + $.trim(dts[1]))); }
		if(err!=null) { throw(err); }
		return true;
	}
	catch (err)
	{
		alert('\'' + $(elem).val() + '\': '+  err + "\n\nPlease use \'MM/DD/YYYY - MM/DD/YYYY\' format.");
		$(elem).focus();
		return false;
	}
	return true;
};

numberDecimalRE = new RegExp("^-*\\d*.*\\d+$");
verifyNumberDE = function(elem) {
	try
	{
		var fix = false;
		var err = null;
		var escapedVal = escape( $.trim($(elem).val()).replace(/ /g, '') );
		if( officeCharsRE.exec(escapedVal) ) { escapedVal = escapedVal.replace(/%u2013/, '-'); fix = true; }
		if( !numberDecimalRE.exec(escapedVal) ) { throw('Invalid Numerical Value.'); }

		if(fix) { $(elem.val(escapedVal)); }
		if(err!=null) { throw(err); }
		$(elem).removeClass('error-border')
		return true;
	}
	catch (err)
	{
		alert('\'' + $(elem).val() + '\': '+  err);
		$(elem).addClass('error-border').focus();
		return false;
	}
};

popupwin3 = function(href, name, attr) {
	var tp = 0;
	var lft = 0;
	w = window.open(href, name, 'top='+tp+',left='+lft+','+attr);
	if(w!=null) { w.focus(); }
}


