
var redirectCounter = -1;
var redirectURL     = '';
var redirectBack    = 0;
var redirectTimer   = null;

function redirect( message, destination, delay )
{
    window.location = '/?module=system&page=redirect&message=' + message + '&destination=' + destination + '&delay=' + delay;
}

function setRedirectCountDown( seconds )
{
    redirectCounter = seconds;
}

function setRedirectURL( url )
{
    redirectURL = url;
}

function setRedirectBack()
{
    redirectBack = 1;
}

function redirectCountDown()
{
    if ( redirectCounter >= 0 && ( redirectURL != '' || redirectBack == 1 ) )
    {
        if(document.cdTimer)
            document.cdTimer.innerHTML = '('+redirectCounter+')';
        redirectCounter--;
        if (redirectCounter >= 0)
            redirectTimer = window.setTimeout("redirectCountDown()",1000);
        else
        {
            redirectTimer = null;
            if ( redirectBack == 1 )
            {
                history.back();
            }
            else
            {
                window.location.replace(redirectURL);
            }
        }
    }
}

function setzindex(elementId, zindex) {
	var ele = document.getElementById(elementId);
	if ( ele == null ){ return; }
	ele.style.zIndex = zindex;
}

function dumpPrint(arr,maxlevel){
    win = window.open("","debug","width=600,height=450,status,scrollbars,resizable,screenX=20,screenY=40,left=20,top=40");
    var content = dump(arr,maxlevel,0,win);
    content.replace(/\n/g,"<br>\n");
    content.replace(/ /g,"&nbsp;");
}
function dump(arr,maxlevel,level,win) {
    var dumped_text = "";
    if(!level) level = 0;
    if(!maxlevel) maxlevel = 1;

    //The padding given at the beginning of the line.
    var level_padding = "";
    for(var j=0;j<level;j++) level_padding += "    ";

    if(level>=maxlevel){
        if(win!=null) win.document.write("...<br>");
        else return "...\n";
        return;
    } else {
        if(win!=null) win.document.write("<br>");
    }
    if(typeof(arr) == 'object') { //Array/Hashes/Objects
        for(var item in arr) {
            var value = arr[item];
            if(typeof(value) == 'object') { //If it is an array,
                if(win!=null) win.document.write(level_padding.replace(/ /g,"&nbsp;")+"'"+item+"' => ");
                else dumped_text += level_padding + "'" + item + "' => ";
                dumped_text += dump(value,maxlevel,level+1,win);
            } else {
                if(win!=null) win.document.write(level_padding.replace(/ /g,"&nbsp;")+"'"+item+"' => \"" + value + "\"<br>");
                else dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
            }
        }
    } else { //Stings/Chars/Numbers etc.
        dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
    }
    return dumped_text;
}

function checkboxExpand(sourceId,targetId){
    var cb = document.getElementById(sourceId);
    var el = document.getElementById(targetId);
	if ( cb == null ){ return false; }
    if ( el == null ){ return false; }
    if ( cb.checked == false ) {
        el.style.display = 'none';
    } else {
        el.style.display = '';
    }
}

function checkboxRetract(sourceId,targetId){
    var cb = document.getElementById(sourceId);
    var el = document.getElementById(targetId);
	if ( cb == null ){ return false; }
    if ( el == null ){ return false; }
    if ( cb.checked == false ) {
        el.style.display = '';
    } else {
        el.style.display = 'none';
    }
}

function checkboxDisable(sourceId,targetId){
    var cb = document.getElementById(sourceId);
    var el = document.getElementById(targetId);
	if ( cb == null ){ return false; }
    if ( el == null ){ return false; }
	el.disabled = cb.checked;
}

function radioDisable(sourceId,targetId){
	checkboxDisable(sourceId,targetId);
}

function checkboxReadOnly(sourceId,targetId){
    var cb = document.getElementById(sourceId);
    var el = document.getElementById(targetId);
	if ( cb == null ){ return false; }
    if ( el == null ){ return false; }
	el.readOnly = cb.checked;
}

function radioReadOnly(sourceId,targetId){
	checkboxReadOnly(sourceId,targetId);
}


function selectValueExpand(sourceId,prefix,suffix){
    var sel = document.getElementById(sourceId);
    for (i = 0; i < sel.length; i++){
        var el = document.getElementById(prefix+sel[i].value+suffix);
        if ( ( el = document.getElementById(prefix+sel[i].value+suffix) ) != null ){
            if ( sel[i].selected == false ) {
                el.style.display = 'none';
            } else {
                el.style.display = '';
            }
        }
    }
}

function radioValueExpand(sourceName,prefix,suffix){
	var els = document.getElementsByName(sourceName);
	if ( els == null ){ return ""; }
	var radioLength = els.length;
	for ( var i = 0; i < radioLength; i++ ){
		var el = document.getElementById(prefix+els[i].value+suffix);
		if ( ( el = document.getElementById(prefix+els[i].value+suffix) ) != null ){
			if ( els[i].checked == false ) {
				el.style.display = 'none';
			} else {
				el.style.display = '';
			}
		}
	}
}

function checkboxCheckAll(sourceId,targetName){
    var cb = document.getElementById(sourceId);
    var els = document.getElementsByName(targetName);
    for (i = 0; i < els.length; i++){
        if ( cb.checked == false ) {
	        els[i].checked = false;
        } else {
	        els[i].checked = true;
        }
    }
}

function radioValue(elementName){
	var els = document.getElementsByName(elementName);
	if ( els == null ){ return ""; }
	var radioLength = els.length;
	if ( radioLength == undefined ){
		if (els.checked){
			return els.value;
		} else {
			return "";
		}
	}
	for ( var i = 0; i < radioLength; i++ ){
		if ( els[i].checked ){ return els[i].value; }
	}
	return "";
}

function restoreShow(obj,def) {
    var val = getCookie(obj);
    var el = document.getElementById(obj);
    if ( el == null ){ return false; }
    if ( val == 'hide' ){ el.style.display = 'none'; }
    else if ( val == 'show' ){ el.style.display = ''; }
    else if ( def == 'hide' ){ el.style.display = 'none'; }
    else if ( def == 'show' ){ el.style.display = ''; }
    else { el.style.display = ''; }
}

function toggleShow(obj,remember) {
    var el = document.getElementById(obj);
    if ( el == null ){ return false; }
    if ( el.style.display != 'none' ) {
        if(remember){ setCookie(obj,'hide'); }
        el.style.display = 'none';
    } else {
        if(remember){ setCookie(obj,'show'); }
        el.style.display = '';
    }
}

function getCookie(c_name){
    var re = new RegExp(c_name+"=[^;]+", "i"); //construct RE to search for target name/value pair
    if (document.cookie.match(re)) //if cookie found
        return document.cookie.match(re)[0].split("=")[1] //return its value
    return -1;
}
function setCookie(c_name,value,persistdays){
    var exdate = new Date();
    var expiredays=(typeof persistdays=="undefined")? 1 : parseInt(persistdays);
    exdate.setDate(exdate.getDate()+expiredays)
    document.cookie = c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

// This function formats numbers by adding commas
function numberFormat(nStr){
  nStr += '';
  x = nStr.split('.');
  x1 = x[0];
  x2 = x.length > 1 ? '.' + x[1] : '';
  var rgx = /(\d+)(\d{3})/;
  while (rgx.test(x1))
    x1 = x1.replace(rgx, '$1' + ',' + '$2');
  return x1 + x2;
}

function IsNumeric(strString){
	var strValidChars = "0123456789.-";
	var strChar;
	var blnResult = true;
	if (typeof strString == 'undefined') return false;
	if (strString.length == 0) return false;
	for (i = 0; i < strString.length && blnResult == true; i++){
		strChar = strString.charAt(i);
		if (strValidChars.indexOf(strChar) == -1){
			blnResult = false;
		}
	}
	return blnResult;
}

/**
 * http://extjs.com/forum/showthread.php?t=22218
 * For non-IE browsers, this is fixed with a CSS addition.
 * @param {Ext.grid.GridPanel} grid The GridPanel to fix.
 */
var reenableTextSelection = function(grid, ds){
	if(Ext.isIE){
		ds.on("load", function(){
			var elems=Ext.DomQuery.select("div[unselectable=on]", grid.dom);
			for(var i=0, len=elems.length; i<len; i++){
				elems[i].unselectable = "off";
			}
		});
	}
};
