function T_Auth_Login(i_login,i_pass,i_saveauth)
{
    this.h_login.value = this.h_pass.value = '';
    this.h_login.value = document.getElementById(i_login).value;
    this.h_pass.value = document.getElementById(i_pass).value;
    this.h_pass.value = this.h_pass.value.replace(/ $/, "");
    this.h_pass.value = hex_md5(hex_md5(this.h_pass.value) + this.key);
    this.h_saveauth.value = 1;
    document.getElementById(i_login).disabled = document.getElementById(i_pass).disabled = true; 
     
//    document.getElementById('auth_sess2').value = (document.getElementById(i_pass).value);
    this.form.action = "";
    this.form.submit();
}
function T_Auth(name, key)
{
    this.name    = name;
    this.key = key;
    this.form = document.getElementById(name+'_form');
    this.h_login = document.getElementById(name + '_login');
    this.h_pass  = document.getElementById(name + '_pass');
    this.h_saveauth = document.getElementById(name + '_saveauth');

    this.login    = T_Auth_Login; 
}


function T_Errors_Add(str,field)
{
    if (!field) field = '';
    this.array.push(str);
    this.fields.push(field);
    busy = false;
}
function T_Errors_Print()
{
    busy = false;
    var i,j;
    var tempArr = new Array();
    var str = '';
    if (this.array.length == 0)
    {
        this.body.style.display = 'none';
        this.body.innerHTML = '';
        return true;
    }
    else
        this.body.style.display = 'block';

    for (i = 0; i < this.fieldsUnset.length; i++)
    {
    
        tempArr = this.fieldsUnset[i].split(",");
        for (j = 0; j < tempArr.length; j++)
        {
            if (tempArr[j] != '' && document.getElementById(tempArr[j])) document.getElementById(tempArr[j]).className = 'normal';
        }
    }

    for (i = 0; i < this.array.length; i++)
    {
        tempArr = this.fields[i].split(",");
        for (j = 0; j < tempArr.length; j++)
        {
            if (tempArr[j] != '' && document.getElementById(tempArr[j]))  document.getElementById(tempArr[j]).className = 'wrong';
        }
        
        str +=''+this.array[i]+'<br />';
        
    }
    this.body.innerHTML = str + '';
    this.fieldsUnset    = this.fields; 
    this.array            = new Array();
    this.fields            = new Array();
}
function T_Errors(name,color)
{
    this.name       = name;
    this.body        = document.getElementById(name + '_errors');
    this.add        = T_Errors_Add;
    this.array        = new Array();
    this.fields        = new Array();
    this.fieldsUnset= new Array();
    this.print        = T_Errors_Print;
    this.body.style.display = 'none';
    this.body.className = 'errorBlock';

    if (color)
        this.body.style.borderColor = color;
    
}

function checkMaxLength(obj, maxCnt)
{
    if (obj.value.length >= maxCnt)
        obj.value = obj.value.substring(0, maxCnt);
}

function GoTo(url)
{
	window.location = url;
}

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"), "");
}

function PopUp(page, width, height, scrollbars, resizable) 
{ 
	var str = ''; 
	if (document.all) 
	{ 
		var bHeight = document.body.offsetHeight; 
		var bWidth = document.body.offsetWidth; 
	}
	else 
	{ 
		var bWidth = window.innerWidth; 
		var bHeight = window.innerHeight;
		
	}
	
	str += 'width='+width+''; 
	str += ', height='+height+''; 
	str += ', location=no'; 
	str += ', menubar=no'; 
	str += ', resizable=' + (!resizable || resizable=='yes'?'yes':'no'); 
	str += ', scrollbars=' + (!scrollbars || scrollbars=='yes'?'yes':'no'); 
	str += ', status=no'; str += ', titlebar=yes';
	str += ', toolbar=no'; str += ', top='+parseInt((bHeight-height)/2)+'';
	str += ', left='+parseInt((bWidth-width)/2)+'';
	
	window.open(page,'_blank', str); 
}

var dateFormat = function () {
    var    token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
        timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
        timezoneClip = /[^-+\dA-Z]/g,
        pad = function (val, len) {
            val = String(val);
            len = len || 2;
            while (val.length < len) val = "0" + val;
            return val;
        };

    // Regexes and supporting functions are cached through closure
    return function (date, mask, utc) {
        var dF = dateFormat;

        // You can't provide utc if you skip other args (use the "UTC:" mask prefix)
        if (arguments.length == 1 && (typeof date == "string" || date instanceof String) && !/\d/.test(date)) {
            mask = date;
            date = undefined;
        }

        // Passing date through Date applies Date.parse, if necessary
        date = date ? new Date(date) : new Date();
        if (isNaN(date)) throw new SyntaxError("invalid date");

        mask = String(dF.masks[mask] || mask || dF.masks["default"]);

        // Allow setting the utc argument via the mask
        if (mask.slice(0, 4) == "UTC:") {
            mask = mask.slice(4);
            utc = true;
        }

        var    _ = utc ? "getUTC" : "get",
            d = date[_ + "Date"](),
            D = date[_ + "Day"](),
            m = date[_ + "Month"](),
            y = date[_ + "FullYear"](),
            H = date[_ + "Hours"](),
            M = date[_ + "Minutes"](),
            s = date[_ + "Seconds"](),
            L = date[_ + "Milliseconds"](),
            o = utc ? 0 : date.getTimezoneOffset(),
            flags = {
                d:    d,
                dd:   pad(d),
                ddd:  dF.i18n.dayNames[D],
                dddd: dF.i18n.dayNames[D + 7],
                m:    m + 1,
                mm:   pad(m + 1),
                mmm:  dF.i18n.monthNames[m],
                mmmm: dF.i18n.monthNames[m + 12],
                yy:   String(y).slice(2),
                yyyy: y,
                h:    H % 12 || 12,
                hh:   pad(H % 12 || 12),
                H:    H,
                HH:   pad(H),
                M:    M,
                MM:   pad(M),
                s:    s,
                ss:   pad(s),
                l:    pad(L, 3),
                L:    pad(L > 99 ? Math.round(L / 10) : L),
                t:    H < 12 ? "a"  : "p",
                tt:   H < 12 ? "am" : "pm",
                T:    H < 12 ? "A"  : "P",
                TT:   H < 12 ? "AM" : "PM",
                Z:    utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
                o:    (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
                S:    ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
            };

        return mask.replace(token, function ($0) {
            return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
        });
    };
}();

// Some common format strings
dateFormat.masks = {
    "default":      "ddd mmm dd yyyy HH:MM:ss",
    shortDate:      "m/d/yy",
    mediumDate:     "mmm d, yyyy",
    longDate:       "mmmm d, yyyy",
    fullDate:       "dddd, mmmm d, yyyy",
    shortTime:      "h:MM TT",
    mediumTime:     "h:MM:ss TT",
    longTime:       "h:MM:ss TT Z",
    isoDate:        "yyyy-mm-dd",
    isoTime:        "HH:MM:ss",
    isoDateTime:    "yyyy-mm-dd'T'HH:MM:ss",
    isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};

// Internationalization strings
dateFormat.i18n = {
    dayNames: [
        "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
        "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
    ],
    monthNames: [
        "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
        "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
    ]
};

// For convenience...
Date.prototype.format = function (mask, utc) {
    return dateFormat(this, mask, utc);
};

function isInt(x) 
{
   var y=parseInt(x);
   if (isNaN(y)) return false;
   return x==y && x.toString()==y.toString();
}

function T_SYSMSG_Print()
{
    var str = '';
    var i,j;
    this.body = document.getElementById(this.name+'_body');
    this.text = document.getElementById(this.name+'_text');

    
    if (this.body && this.arr.length)
    {
        j = 1;
        for (i in this.arr)
        {
            if (!this.arr[i][0]) continue;
            else if (j == 4) break;
            
            if (this.arr[i][1])
                str += ' <a href="javascript:' + this.arr[i][1] + '">' + this.arr[i][0] + '</a> <font color="#ACACAC">|</font>';
            else
            {
                str += '' + this.arr[i][0] + ' <font color="#ACACAC">|</font>';
                
            }
            
            j++;
        }
        
        str = str.substr(0,str.length-30); 
        this.text.innerHTML    = str;
        if (str)
            this.body.style.display = 'block';                                       
    }
    else
    {
        this.body.style.display = 'none';                                       
    }
}

function T_SYSMSG_Add(str, url)
{
    this.arr.push(new Array(str, url));

}

function T_SYSMSG(name)
{
    this.arr = new Array();
    this.name = name;
    this.body = null;
    this.text = null; 
    
    this.print = T_SYSMSG_Print;
    this.add = T_SYSMSG_Add;
    
} 

;
