
var ua = navigator.userAgent.toLowerCase();
var isGecko = (ua.indexOf('gecko') != -1 && ua.indexOf('safari') == -1);
var isIE = (ua.indexOf('msie') != -1 && !this.isOpera && (ua.indexOf('webtv') == -1));
var isSafari = (ua.indexOf('safari') != - 1);
var isWin = (ua.indexOf('win') != -1);
var isIE7 = (ua.indexOf('msie 7.0') != -1);
var isWin32 = (isWin && ( ua.indexOf('95') != -1 || ua.indexOf('98') != -1 || ua.indexOf('nt') != -1 || ua.indexOf('win32') != -1 || ua.indexOf('32bit') != -1 || ua.indexOf('xp') != -1) );
var isMac = (ua.indexOf('mac') != -1);
var isUnix = (ua.indexOf('unix') != -1 || ua.indexOf('sunos') != -1 || ua.indexOf('bsd') != -1 || ua.indexOf('x11') != -1)
var isLinux = (ua.indexOf('linux') != -1);
var isIEMac = (isIE && isMac);
var isIEWin = (isIE && !isMac);
var isFireFox = (ua.indexOf('firefox') != - 1);

var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

function isMaxLength(textArea, maxLength){
   var textLength = '';
   if (textArea.getAttribute){
      textLength = textArea.value.length;
      if (textLength > maxLength) {
         textArea.value = textArea.value.substring(0, maxLength)
         window.status = '0 characters remaining.';
      }else{
         window.status = (maxLength - textLength) + ' characters remaining.';
      }
   }
}

function closeThisWindow(){
   closeWindow(window);
}

function closeWindow(windowObject){
   windowObject.opener = self;
   windowObject.close();
}

function base64Encode(input) {
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   do {
      chr1 = input.charCodeAt(i++);
      chr2 = input.charCodeAt(i++);
      chr3 = input.charCodeAt(i++);

      enc1 = chr1 >> 2;
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
      enc4 = chr3 & 63;

      if (isNaN(chr2)) {
         enc3 = enc4 = 64;
      } else if (isNaN(chr3)) {
         enc4 = 64;
      }

      output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + 
         keyStr.charAt(enc3) + keyStr.charAt(enc4);
   } while (i < input.length);
   
   return output;
}

function base64Decode(input) {
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
   input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

   do {
      enc1 = keyStr.indexOf(input.charAt(i++));
      enc2 = keyStr.indexOf(input.charAt(i++));
      enc3 = keyStr.indexOf(input.charAt(i++));
      enc4 = keyStr.indexOf(input.charAt(i++));

      chr1 = (enc1 << 2) | (enc2 >> 4);
      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
      chr3 = ((enc3 & 3) << 6) | enc4;

      output = output + String.fromCharCode(chr1);

      if (enc3 != 64) {
         output = output + String.fromCharCode(chr2);
      }
      if (enc4 != 64) {
         output = output + String.fromCharCode(chr3);
      }
   } while (i < input.length);

   return output;
}

function setElementFocus(elementID){
   var element = getDocumentElementById(elementID);
   if (element != null){
      element.focus();
   }
}

function showDocumentElement(element, visible){
    if(visible){
        if (document.all && document.getElementById) {
            element.style.display = 'block';
        } else {
            element.style.display = 'table-row';
        }
        element.style.visibility = 'visible';
    } else {
        element.style.display='none';
        element.style.visibility = 'hidden';
    }
}

function showDocumentElementById(elementId, visible){
    var element = getDocumentElementById(elementId);
    if(element != null){
        showDocumentElement(element, visible);
    }
}

function getDocumentElementById(elementID){
   if (document.getElementById){
      return document.getElementById(elementID);
   }else{
      if (document.all){
         return document.all(elementID);
      }else{
         if (document.layers){
            return document.layers(elementID);
         }else{
				return eval('document.forms[0].' + elementID);
         }
      }
   }
}

function cr2tab() {
	ek =event.keyCode
	if (ek==13) {
		event.keyCode=9;
		if (navigator.appVersion.indexOf("Mac")!=-1) {
			event.returnValue=false;
		}
	}
}

function encryptStringArray(text, keys){
   var i = 0;
   for (i = 0; i < keys.length; i++){
	   if(i == keys.length - 1){
		   text = encryptString(text, keys[i])
	   }else{
		   text = encryptStringRaw(text, keys[i])
	   }
   }
   return text;
}

function decryptStringArray(text, keys){
   var i = 0;
   for (i = keys.length - 1; i >= 0; i--){
	   if(i == keys.length - 1){
		   text = decryptString(text, keys[i])
	   }else{
		   text = decryptStringRaw(text, keys[i])
	   }
   }
   return text;
}

function encryptString(text, key)
{
	var output = "0x";
	var i = 0;
	var j = 0;
	for (i = 0; i < text.length; i++)
	{
      if (j >= key.length) j = 0;
		output += padString(baseConverter(text.charCodeAt(i) ^ key.charCodeAt(j), 10, 16), "0", 2);
      j = j + 1
	}
	return output;
}

function decryptString(text, key)
{
	var output = "";
	var i = 0;
	var j = 0;
	var hex;
	for (i = 2; i < text.length; i = i + 2)
	{
      if (j >= key.length) j = 0;
		output += String.fromCharCode(parseInt(baseConverter(text.charAt(i) + text.charAt(i + 1), 16, 10)) ^ key.charCodeAt(j));
      j = j + 1
	}
	return output;
}

function encryptStringRaw(text, key)
{
	var output = "";
	var i = 0;
	var j = 0;
	for (i = 0; i < text.length; i++)
	{
      if (j >= key.length) j = 0;
		output += String.fromCharCode(text.charCodeAt(i) ^ key.charCodeAt(j))
      j = j + 1
	}
	return output;
}

function decryptStringRaw(text, key)
{
	var output = "";
	var i = 0;
	var j = 0;
	var hex;
	for (i = 0; i < text.length; i++)
	{
      if (j >= key.length) j = 0;
		output += String.fromCharCode(text.charCodeAt(i) ^ key.charCodeAt(j));
      j = j + 1
	}
	return output;
}

function baseConverter(number, fromBase, toBase, fromCharSet, toCharSet){
	 var i = 0;
	 var totalValue = 0;
	 var currentValue = 0;
	 var currentNumber = 0;
	 var returnValue = '';
	 if (fromCharSet == '' || fromCharSet == undefined) fromCharSet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
	 if (toCharSet == '' || toCharSet == undefined) toCharSet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
	 number = number + '';
	 if (number != ''){
	    number = Reverse(number)
	    for (i = 0; i < number.length; i++){
		    currentValue = fromCharSet.indexOf(number.charAt(i));
		    if (currentValue > 0){
		       totalValue = totalValue + (currentValue * Math.pow(fromBase, i));
		    }
	    }
       if (totalValue != 0){
		    currentNumber = totalValue;
		    while (currentNumber != 0){
				returnValue = toCharSet.charAt(currentNumber % toBase) + returnValue;
				currentNumber = parseInt(currentNumber / toBase);
		    }
		 }else{
		    returnValue = toCharSet.charAt(0) + returnValue;
       }
    }else{
		 returnValue = toCharSet.charAt(0) + returnValue;
	 }
	 return returnValue;
}

function padString(text, padchar, padlen){
   var i;
   var output;
   output = text;
   for (i = text.length + 1; i <= padlen; i++){
	   output = padchar + output;
   }
   return output;
}

function Reverse(text){
   var i;
   var output = '';
   for (i = 0; i < text.length; i++){
	   output = text.charAt(i) + output;
   }
   return output;
}

function LTrim(str)
{
	 var whitespace = new String(" \t\n\r");
	 var s = new String(str);
	 if (whitespace.indexOf(s.charAt(0)) != -1) {
		 var j=0, i = s.length;
	 while (j < i && whitespace.indexOf(s.charAt(j)) != -1) j++;
	 s = s.substring(j, i);
	 }
	 return s;
}

function RTrim(str)
{
	 var whitespace = new String(" \t\n\r");
	 var s = new String(str);
	 if (whitespace.indexOf(s.charAt(s.length-1)) != -1) {
	 var i = s.length - 1;
	 while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
	 i--;
	 s = s.substring(0, i+1);
	 }
	 return s;
}

function Trim(str)
{
	 return RTrim(LTrim(str));
}

function Len(str)
{
	 return String(str).length;
}

function Left(str, n)
{
	 if (n <= 0)
		  return "";
	 else if (n > String(str).length)
		  return str;
	 else
		  return String(str).substring(0,n);
}

function Right(str, n)
{
	 if (n <= 0)
		  return "";
	 else if (n > String(str).length)
		  return str;
	 else {
		  var iLen = String(str).length;
		  return String(str).substring(iLen, iLen - n);
	 }
}

function Mid(str, start, len)
{
	 if (start < 0 || len < 0) return "";
	 var iEnd, iLen = String(str).length;
	 if (start + len > iLen)
		  iEnd = iLen;
	 else
		  iEnd = start + len;
	 return String(str).substring(start,iEnd);
}

function InStr(strSearch, charSearchFor)
{
	 for (i=0; i < Len(strSearch); i++)
	 {
		  if (charSearchFor == Mid(strSearch, i, 1))
		  {
				return i;
		  }
	 }
	 return -1;
} 

function Querystring(qs) { // optionally pass a querystring to parse
	this.params = new Object()
	this.get=Querystring_get
	if (qs == null)
		qs=location.search.substring(1,location.search.length)
	if (qs.length == 0) return
	qs = qs.replace(/\+/g, ' ')
	var args = qs.split('&') // parse out name/value pairs separated via &
	for (var i=0;i<args.length;i++) {
		var value;
		var pair = args[i].split('=')
		var name = unescape(pair[0])

		if (pair.length == 2)
			value = unescape(pair[1])
		else
			value = name
		
		this.params[name] = value
	}
}

function Querystring_get(key, default_) {
	if (default_ == null) default_ = null;
	
	var value=this.params[key]
	if (value==null) value=default_;
	
	return value
}

//   onunload = function() { 
//   if ((window.event.clientX<0) && (window.event.clientY<0)) {
//     window.open("sessionclose.aspx");}
//   }


function getClientWidth() {
	return f_filterResults (
		window.innerWidth ? window.innerWidth : 0,
		document.documentElement ? document.documentElement.clientWidth : 0,
		document.body ? document.body.clientWidth : 0
	);
}
function getClientHeight() {
	return f_filterResults (
		window.innerHeight ? window.innerHeight : 0,
		document.documentElement ? document.documentElement.clientHeight : 0,
		document.body ? document.body.clientHeight : 0
	);
}
function getScrollLeft() {
	return f_filterResults (
		window.pageXOffset ? window.pageXOffset : 0,
		document.documentElement ? document.documentElement.scrollLeft : 0,
		document.body ? document.body.scrollLeft : 0
	);
}
function getScrollTop() {
	return f_filterResults (
		window.pageYOffset ? window.pageYOffset : 0,
		document.documentElement ? document.documentElement.scrollTop : 0,
		document.body ? document.body.scrollTop : 0
	);
}
function f_filterResults(n_win, n_docel, n_body) {
	var n_result = n_win ? n_win : 0;
	if (n_docel && (!n_result || (n_result > n_docel)))
		n_result = n_docel;
	return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}
