/**
 * myRedirect
 * 
 * For opening links in new tabs/windows.
 * Also allows bookmarking of pages.
 */
function myRedirect()
{	
	var url = document.location.href;
	var ndx = url.indexOf('#');
    
    if (ndx > 0) 
	{
		var l = url.substring(ndx + 2);
		$('#' + l).trigger('click');
	}
}

/**
 * addGridTrigger
 * 
 * Add marker that grid has changes in pagination or sorting
 */
function addGridTrigger(myGrid)
{
	$('#' + myGrid).setGridParam({
		postData: {
			page_sort_t: 'Y'
		}
	});
}

/**********************************************
 *
 * Data manipulation
 * 
 **********************************************/

$.extend({
	unserialize: function(data) {
		data = data.split('&');
	
		for (var i = 0; i < data.length; i++)
		{
			var datum = data[i].split('=');
			var field = datum[0];
			var value = $.URLDecode(datum[1]);
		
			if ($('*[name="' + field + '"]').length > 0)
			{	
				$('*[name="' + field + '"]').val(value);
			}
		}
	},
	
	formReset: function(id) {
		$('#' + id).each(function() {
			this.reset();
		});
	},
	
	strLPad: function(i,l,s) {
		var o = i.toString();
		
		if ( ! s) s = '0'; 
		while (o.length < l) o = s + o;
		return o;
	},
	
	isNumber: function(s, decimal) {
		decimal = decimal || false;
		
		var validChars = "0123456789";
		var isNumber = true;
		var digit;
		
		if (decimal) validChars += '.';
		
		for (i = 0; i < s.length && isNumber == true; i++) 
		{ 
			digit = s.charAt(i); 
			if (validChars.indexOf(digit) == -1) isNumber = false;
		}
		
		return isNumber;	
	},
	
	validDateFormat: function(s, expr) {
		expr = expr || /^\d{2}\/\d{2}\/\d{4}$/; 
		
		if ( ! expr.test(s)) return false;
		return true;
	},
	
	validDate: function(value, element) {
		// from validation additional methods
		var check = false;
		var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/
		if (re.test(value)) 
		{
			var adata = value.split('/');
			var gg = parseInt(adata[1],10);
			var mm = parseInt(adata[0],10);
			var aaaa = parseInt(adata[2],10);
			var xdata = new Date(aaaa,mm-1,gg);
			if ( ( xdata.getFullYear() == aaaa ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == gg ) )
				check = true;
			else
				check = false;
		} 
		else check = false;
		
		return check;
	}
});
	


/********************************************
 * 
 * Additional codes downloaded from all over
 * 
 ********************************************/
var monNames = new Array ('',
				'January','February','March',
				'April','May','June',
				'July','August','September',
				'October','November','December');

function current_date_time()
{
	var now=new Date();
	var hrs=now.getHours();
	var mins=now.getMinutes();
	var secs=now.getSeconds();
	var date = now.getDate();
	var daynum = now.getDay();
	var monnum = now.getMonth() + 1;
	var year = now.getYear();
	var don="am"
	
	if ( year < 200 ) {
		year += 1900;
	}
	
	if (hrs>=12){ don="pm" }
	if (hrs>12) { hrs-=12 }
	if (hrs==0) { hrs=12 }
	if (hrs<10) { hrs="0"+hrs }
	if (mins<10) { mins="0"+mins }
	if (secs<10) { secs="0"+secs }
	document.getElementById("clock").innerHTML = monNames[monnum] + "&nbsp;" + date + ",&nbsp;" + year + "&nbsp;" + hrs + ":" + mins + ":" + secs + "&nbsp;" + don
	setTimeout("current_date_time()",1000)
}

$.extend({
	URLEncode: function(c){
				var o='';var x=0;c=c.toString();var r=/(^[a-zA-Z0-9_.]*)/;
				while(x<c.length){var m=r.exec(c.substr(x));
				if(m!=null && m.length>1 && m[1]!=''){o+=m[1];x+=m[1].length;
				}else{if(c[x]==' ')o+='+';else{var d=c.charCodeAt(x);var h=d.toString(16);
				o+='%'+(h.length<2?'0':'')+h.toUpperCase();}x++;}}return o;},
	URLDecode: function(s){
				var o=s;var binVal,t;var r=/(%[^%]{2})/;
				while((m=r.exec(o))!=null && m.length>1 && m[1]!=''){b=parseInt(m[1].substr(1),16);
				t=String.fromCharCode(b);o=o.replace(m[1],t);}return o;}
});

/********************************************
 * 
 * For Prices (block non-numeric values, format to 2 decimal places)
 * 
 ********************************************/
function blockNonNumbers(obj, e, allowDecimal, allowNegative)
{
	var key;
	var isCtrl = false;
	var keychar;
	var reg;
		
	if(window.event) {
		key = e.keyCode;
		isCtrl = window.event.ctrlKey
	}
	else if(e.which) {
		key = e.which;
		isCtrl = e.ctrlKey;
	}
	
	if (isNaN(key)) return true;
	
	keychar = String.fromCharCode(key);
	
	// check for backspace or delete, or if Ctrl was pressed
	if (key == 8 || isCtrl)
	{
		return true;
	}

	reg = /\d/;
	var isFirstN = allowNegative ? keychar == '-' && obj.value.indexOf('-') == -1 : false;
	var isFirstD = allowDecimal ? keychar == '.' && obj.value.indexOf('.') == -1 : false;
	
	return isFirstN || isFirstD || reg.test(keychar);
}

function extractNumber(obj, decimalPlaces, allowNegative)
{
	var temp = obj.value;
	
	// avoid changing things if already formatted correctly
	var reg0Str = '[0-9]*';
	if (decimalPlaces > 0) {
		reg0Str += '\\.?[0-9]{0,' + decimalPlaces + '}';
	} else if (decimalPlaces < 0) {
		reg0Str += '\\.?[0-9]*';
	}
	reg0Str = allowNegative ? '^-?' + reg0Str : '^' + reg0Str;
	reg0Str = reg0Str + '$';
	var reg0 = new RegExp(reg0Str);
	if (reg0.test(temp)) return true;

	// first replace all non numbers
	var reg1Str = '[^0-9' + (decimalPlaces != 0 ? '.' : '') + (allowNegative ? '-' : '') + ']';
	var reg1 = new RegExp(reg1Str, 'g');
	temp = temp.replace(reg1, '');

	if (allowNegative) {
		// replace extra negative
		var hasNegative = temp.length > 0 && temp.charAt(0) == '-';
		var reg2 = /-/g;
		temp = temp.replace(reg2, '');
		if (hasNegative) temp = '-' + temp;
	}
	
	if (decimalPlaces != 0) {
		var reg3 = /\./g;
		var reg3Array = reg3.exec(temp);
		if (reg3Array != null) {
			// keep only first occurrence of .
			//  and the number of places specified by decimalPlaces or the entire string if decimalPlaces < 0
			var reg3Right = temp.substring(reg3Array.index + reg3Array[0].length);
			reg3Right = reg3Right.replace(reg3, '');
			reg3Right = decimalPlaces > 0 ? reg3Right.substring(0, decimalPlaces) : reg3Right;
			temp = temp.substring(0,reg3Array.index) + '.' + reg3Right;
		}
	}
	
	obj.value = temp;
}

function formatInteger(num)
{
    if (Trim(num) == "")
        num = "0"
	if(isNaN(num))
		num = "0";
	if (num != "0") {
		while (num.charAt(0) == '0') {
			num = num.substr(1);
		}
	}
    if (Trim(num) == "")
        num = "0"
	return parseInt(num);
}

function formatCurrency(num) {
    num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
        num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3)) + num.substring(num.length-(4*i+3));
		return (((sign)?'':'-') + num + '.' + cents);
}


/********************************************
 * Trim functions
 * Returns string with whitespace trimmed
 * 
 ********************************************/
function LTrim(str){
	if(str==null) return null;
	for(var i=0;str.charAt(i)==" ";i++);
		return str.substring(i,str.length);
}
function RTrim(str){
	if(str==null) return null;
	for(var i=str.length-1;str.charAt(i)==" ";i--);
		return str.substring(0,i+1);
}
function Trim(str){return LTrim(RTrim(str));}
function LTrimAll(str){
	if(str==null) return str;
	for(var i=0; str.charAt(i)==" " || str.charAt(i)=="\n" || str.charAt(i)=="\t"; i++);
		return str.substring(i,str.length);
}
function RTrimAll(str) {
	if(str==null) return str;
	for (var i=str.length-1; str.charAt(i)==" " || str.charAt(i)=="\n" || str.charAt(i)=="\t"; i--);
		return str.substring(0,i+1);
}
function TrimAll(str){
	return LTrimAll(RTrimAll(str));
}

