/* 
 * Global constants
 */

//var Y = YAHOO, YU = Y.util, YD = Y.util.Dom, YE = Y.util.Event, YW = Y.widget, YDDM = YU.DragDropMgr;
var ua = navigator.userAgent.toLowerCase(), isIE = ((ua.indexOf("msie") != -1) && (ua.indexOf("opera") == -1));
var isSafari = ua.indexOf("safari")!=-1, isLinux = ua.indexOf("linux")!=-1;

/*
 * Utility functions
 */

function go(url) { 
	window.location = url; 
}

function goBlank(url) { 
	var blankWin = window.open(url,'_blank','menubar=yes,toolbar=yes,location=yes,directories=yes,fullscreen=no,titlebar=yes,hotkeys=yes,status=yes,scrollbars=yes,resizable=yes'); 
}

function popUp(URL,width,height) {
	if (!width) width = 500;  // default window size
	if (!height) height = 350;
	var day=new Date(), id=day.getTime();
	eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=0,width=" + width + ",height=" + height + ",left = 390,top = 312');");
}

function isValidEmail(str) {
	var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return regex.test(str);
}

function isValidDate(str) { // mm/dd/yyyy
	var regex = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/; 
	return regex.test(str);
}

function isValidPhone(phoneNo) {
	var validUSNum = /^[2-9][0-8][0-9][2-9][0-9]{6}$/;
	return validUSNum.test(phoneNo);
}

function isNumber(str) {
	return (str.length > 0 && str.search("[^0-9]") < 0);	
}

function getTodayStr() {
 	var today = new Date(), yr = today.getYear();
	return today.getMonth()+1+"/"+today.getDate()+"/"+(yr + (yr<1900?1900:0));
}

function objectEval(text) {
	// eval() breaks when we use it to get an object using the { a:42, b:'x' } syntax because it thinks that { and } 
	// surround a block and not an object, so we wrap it in an array and extract the first element to get around this.
	// The regex = [start of line][whitespace]{[stuff]}[whitespace][end of line]
	text = text.replace(/\n/g, ' ');
	text = text.replace(/\r/g, ' ');
	if (text.match(/^\s*\{.*\}\s*$/)) { text = '[' + text + '][0]'; }
	return eval(text);
}

function atLeastOneChecked(arr) { 
	if (!arr || !arr.length) return 0; var byEl = typeof arr[0] != 'string';
	for(var i=0, j=arr.length; i<j; i++) { var el = byEl?arr[i]:_gel(arr[i]); if (el.checked) return 1; }
	return 0;
}

function toggleAllCheckboxes(frm, chkName, selAll) {
	var arrChk = frm[chkName]; if (!arrChk || !arrChk.length || arrChk[0].disabled) return;
	for (var i=0,j=arrChk.length; i<j; i++) arrChk[i].checked = selAll;
}

function enableAllCheckboxes(frm, chkName, enableAll) {
	var arrChk = frm[chkName]; if (!arrChk || !arrChk.length) return;
	for (var i=0,j=arrChk.length; i<j; i++) arrChk[i].disabled = !enableAll;
}

function getElementsByTagNames(list,obj) { // list: 'h1,h2,h3,h4'
	if (!obj) var obj = document;
	var tagNames = list.split(',');
	var resultArray = new Array();
	for (var i=0;i<tagNames.length;i++) { var tags = obj.getElementsByTagName(tagNames[i]); for (var j=0;j<tags.length;j++) { resultArray.push(tags[j]); } }
	var testNode = resultArray[0];
	if (!testNode) return [];
	if (testNode.sourceIndex) { resultArray.sort(function (a,b) { return a.sourceIndex - b.sourceIndex; }); }
	else if (testNode.compareDocumentPosition) { resultArray.sort(function (a,b) { return 3 - (a.compareDocumentPosition(b) & 6); }); }
	return resultArray;
}

function URLEncode(clearString) {
    var output = '';
    var x = 0;
    clearString = clearString.toString();
    var regex = /(^[a-zA-Z0-9_.]*)/;
    while (x < clearString.length) {
        var match = regex.exec(clearString.substr(x));
        if (match != null && match.length > 1 && match[1] != '') {
            output += match[1];
            x += match[1].length;
        } else {
            if (clearString[x] == ' ') output += '+';
            else {
                var charCode = clearString.charCodeAt(x);
                var hexVal = charCode.toString(16);
                output += '%' + (hexVal.length < 2 ? '0': '') + hexVal.toUpperCase();
            }
            x++;
        }
    }
    return output;
}

function URLDecode(encodedString) {
    var output = encodedString;
    var binVal, thisString;
    var myregexp = /(%[^%]{2})/;
    while ((match = myregexp.exec(output)) != null && match.length > 1 && match[1] != '') {
        binVal = parseInt(match[1].substr(1), 16);
        thisString = String.fromCharCode(binVal);
        output = output.replace(match[1], thisString);
    }
    return output;
}

function addLoadEvent(func) {
	var oldOnload = window.onload;
	if (typeof window.onload != 'function') window.onload = func;
	else window.onload = function() { if (oldOnload) oldOnload(); func(); }
}

function hover(el,isOverLink) { if (isOverLink)	el.style.cursor = 'pointer';el.style.textDecoration = (isOverLink)?'underline':'none'; }
function hand(el) { el.style.cursor = 'pointer'; }

function _tab(fld,pfx,idx,e) { if(fld.value.length>2 && idx<3) { _gel(pfx+(idx+1)).focus();_fstClr=1;return; } var evt = e || window.event;_fstClr=!_fstClr&&fld.value.length==0;if(fld.value.length==0 && !_fstClr && evt.keyCode==8 && idx>1){_gel(pfx+(idx-1)).focus();_fstClr=0;}} var _fstClr = 0;
function _gel(id) { return document.getElementById(id); }
function _val(id) { return _gel(id).value; }
function _dsp(id, bool) { if (_gel(id)==null) return; _gel(id).style.display = bool?'':'none'; }
function _enb(id, bool) { _gel(id).disabled = !bool; }
function _chk(id, bool) { _gel(id).checked = bool; }
function _foc(id) { try{ _gel(id).blur(); _gel(id).focus(); } catch(e){} }
function _vsb(id) { return _gel(id).style.display != 'none'; }
function _isEnabled(id) { return !_gel(id).disabled; }
function _isChecked(id) { return _gel(id).checked; }
function _isVar(str) { return (eval('typeof '+str) != 'undefined'); }
function _trim(str) { return str.replace(/^\s+|\s+$/g,""); }
function _populateMenu(id, data, def) {	_gel(id).options.length = 0; for (var i=0; i<jsonData.length; i++) _gel(id).options[i] = new Option(data[i].name,data[i].id); }