//DHTML Window script- Copyright Dynamic Drive (http://www.dynamicdrive.com)
//For full source code, documentation, and terms of usage,
//Visit http://www.dynamicdrive.com/dynamicindex9/dhtmlwindow.htm
var dragapproved = false;
var minrestore = 0;
var initialwidth, initialheight;
var ie5 = document.all&&document.getElementById;
var ns6 = document.getElementById && !document.all;

function iecompattest() {
  return (!window.opera && document.compatMode && document.compatMode != "BackCompat")? document.documentElement : document.body;
}

function drag_drop(e) {
  if (ie5&&dragapproved&&event.button == 1) {
    document.getElementById("dwindow").style.left = tempx + event.clientX - offsetx + 'px';
    document.getElementById("dwindow").style.top = tempy + event.clientY - offsety + 'px';
  } else
  	if (ns6 && dragapproved) {
    	document.getElementById("dwindow").style.left = tempx + e.clientX - offsetx + 'px';
	    document.getElementById("dwindow").style.top = tempy + e.clientY - offsety + 'px';
  	}
}

function initializedrag(e) {
  offsetx=ie5 ? event.clientX : e.clientX;
  offsety=ie5 ? event.clientY : e.clientY;
  document.getElementById("dwindowcontent").style.display = "none"; //extra
  tempx = parseInt(document.getElementById("dwindow").style.left);
  tempy = parseInt(document.getElementById("dwindow").style.top);

  dragapproved = true;
  document.getElementById("dwindow").onmousemove = drag_drop;
}

function loadwindow(url,width,height)
{
  if (!ie5&&!ns6)
    window.open(url,"","width=width,height=height,scrollbars=1");
  else{
    document.getElementById("dwindow").style.display = '';
    document.getElementById("dwindow").style.width = initialwidth=width+"px";
    document.getElementById("dwindow").style.height = initialheight=height+"px";
    document.getElementById("dwindow").style.left = "30px";
    document.getElementById("dwindow").style.top = ns6 ? window.pageYOffset*1+30+"px" : iecompattest().scrollTop*1+30+"px";
    document.getElementById("cframe").src = url;
  }
}

function maximize()
{
  if (minrestore==0){
    minrestore=1 //maximize window
    document.getElementById("maxname").setAttribute("src","./script/images/restore.gif")
    document.getElementById("dwindow").style.width=ns6? window.innerWidth-20+"px" : iecompattest().clientWidth+"px"
    document.getElementById("dwindow").style.height=ns6? window.innerHeight-20+"px" : iecompattest().clientHeight+"px"
  }else{
    minrestore=0 //restore window
    document.getElementById("maxname").setAttribute("src","./script/images/max.gif")
    document.getElementById("dwindow").style.width=initialwidth
    document.getElementById("dwindow").style.height=initialheight
  }
  document.getElementById("dwindow").style.left=ns6? window.pageXOffset+"px" : iecompattest().scrollLeft+"px"
  document.getElementById("dwindow").style.top=ns6? window.pageYOffset+"px" : iecompattest().scrollTop+"px"
}

function closeit()
{
  document.getElementById("dwindow").style.display = 'none';
}

function stopdrag()
{
  dragapproved = false;
  document.getElementById("dwindow").onmousemove = null;
  document.getElementById("dwindowcontent").style.display = ""; //extra
}

/*
*
*/
function NumberFormat(num, inputDecimal)
{
  this.VERSION = 'Number Format v1.5.4';
  this.COMMA = ',';
  this.PERIOD = '.';
  this.DASH = '-'; 
  this.LEFT_PAREN = '('; 
  this.RIGHT_PAREN = ')'; 
  this.LEFT_OUTSIDE = 0; 
  this.LEFT_INSIDE = 1;  
  this.RIGHT_INSIDE = 2;  
  this.RIGHT_OUTSIDE = 3;  
  this.LEFT_DASH = 0; 
  this.RIGHT_DASH = 1; 
  this.PARENTHESIS = 2; 
  this.NO_ROUNDING = -1 
  this.num;
  this.numOriginal;
  this.hasSeparators = false;  
  this.separatorValue;  
  this.inputDecimalValue; 
  this.decimalValue;  
  this.negativeFormat; 
  this.negativeRed; 
  this.hasCurrency;  
  this.currencyPosition;  
  this.currencyValue;  
  this.places;
  this.roundToPlaces; 
  this.truncate; 
  this.setNumber = setNumberNF;
  this.toUnformatted = toUnformattedNF;
  this.setInputDecimal = setInputDecimalNF; 
  this.setSeparators = setSeparatorsNF; 
  this.setCommas = setCommasNF;
  this.setNegativeFormat = setNegativeFormatNF; 
  this.setNegativeRed = setNegativeRedNF; 
  this.setCurrency = setCurrencyNF;
  this.setCurrencyPrefix = setCurrencyPrefixNF;
  this.setCurrencyValue = setCurrencyValueNF; 
  this.setCurrencyPosition = setCurrencyPositionNF; 
  this.setPlaces = setPlacesNF;
  this.toFormatted = toFormattedNF;
  this.toPercentage = toPercentageNF;
  this.getOriginal = getOriginalNF;
  this.moveDecimalRight = moveDecimalRightNF;
  this.moveDecimalLeft = moveDecimalLeftNF;
  this.getRounded = getRoundedNF;
  this.preserveZeros = preserveZerosNF;
  this.justNumber = justNumberNF;
  this.expandExponential = expandExponentialNF;
  this.getZeros = getZerosNF;
  this.moveDecimalAsString = moveDecimalAsStringNF;
  this.moveDecimal = moveDecimalNF;
  this.addSeparators = addSeparatorsNF;
  if (inputDecimal == null) {
    this.setNumber(num, this.PERIOD);
  } else {
    this.setNumber(num, inputDecimal); 
  }
  this.setCommas(true);
  this.setNegativeFormat(this.LEFT_DASH); 
  this.setNegativeRed(false); 
  this.setCurrency(false); 
  this.setCurrencyPrefix('$');
  this.setPlaces(2);
}

function setInputDecimalNF(val)
{
  this.inputDecimalValue = val;
}

function setNumberNF(num, inputDecimal)
{
  if (inputDecimal != null) {
    this.setInputDecimal(inputDecimal); 
  }
  this.numOriginal = num;
  this.num = this.justNumber(num);
}

function toUnformattedNF()
{
  return (this.num);
}

function getOriginalNF()
{
  return (this.numOriginal);
}

function setNegativeFormatNF(format)
{
  this.negativeFormat = format;
}

function setNegativeRedNF(isRed)
{
  this.negativeRed = isRed;
}

function setSeparatorsNF(isC, separator, decimal)
{
  this.hasSeparators = isC;
  if (separator == null) separator = this.COMMA;
  if (decimal == null) decimal = this.PERIOD;
  if (separator == decimal) {
    this.decimalValue = (decimal == this.PERIOD) ? this.COMMA : this.PERIOD;
  } else {
    this.decimalValue = decimal;
  }
  this.separatorValue = separator;
}

function setCommasNF(isC)
{
  this.setSeparators(isC, this.COMMA, this.PERIOD);
}

function setCurrencyNF(isC)
{
  this.hasCurrency = isC;
}

function setCurrencyValueNF(val)
{
  this.currencyValue = val;
}

function setCurrencyPrefixNF(cp)
{
  this.setCurrencyValue(cp);
  this.setCurrencyPosition(this.LEFT_OUTSIDE);
}

function setCurrencyPositionNF(cp)
{
  this.currencyPosition = cp
}

function setPlacesNF(p, tr)
{
  this.roundToPlaces = !(p == this.NO_ROUNDING); 
  this.truncate = (tr != null && tr); 
  this.places = (p < 0) ? 0 : p; 
}

function addSeparatorsNF(nStr, inD, outD, sep)
{
  nStr += '';
  var dpos = nStr.indexOf(inD);
  var nStrEnd = '';
  if (dpos != -1) {
    nStrEnd = outD + nStr.substring(dpos + 1, nStr.length);
    nStr = nStr.substring(0, dpos);
  }
  var rgx = /(\d+)(\d{3})/;
  while (rgx.test(nStr)) {
    nStr = nStr.replace(rgx, '$1' + sep + '$2');
  }
  return nStr + nStrEnd;
}

function toFormattedNF()
{	
  var pos;
  var nNum = this.num; 
  var nStr;            
  var splitString = new Array(2);   
  if (this.roundToPlaces) {
    nNum = this.getRounded(nNum);
    nStr = this.preserveZeros(Math.abs(nNum)); 
  } else {
    nStr = this.expandExponential(Math.abs(nNum)); 
  }
  if (this.hasSeparators) {
    nStr = this.addSeparators(nStr, this.PERIOD, this.decimalValue, this.separatorValue);
  } else {
    nStr = nStr.replace(new RegExp('\\' + this.PERIOD), this.decimalValue); 
  }
  var c0 = '';
  var n0 = '';
  var c1 = '';
  var n1 = '';
  var n2 = '';
  var c2 = '';
  var n3 = '';
  var c3 = '';
  var negSignL = (this.negativeFormat == this.PARENTHESIS) ? this.LEFT_PAREN : this.DASH;
  var negSignR = (this.negativeFormat == this.PARENTHESIS) ? this.RIGHT_PAREN : this.DASH;
  if (this.currencyPosition == this.LEFT_OUTSIDE) {
    if (nNum < 0) {
      if (this.negativeFormat == this.LEFT_DASH || this.negativeFormat == this.PARENTHESIS) n1 = negSignL;
      if (this.negativeFormat == this.RIGHT_DASH || this.negativeFormat == this.PARENTHESIS) n2 = negSignR;
    }
    if (this.hasCurrency) c0 = this.currencyValue;
  } else if (this.currencyPosition == this.LEFT_INSIDE) {
    if (nNum < 0) {
      if (this.negativeFormat == this.LEFT_DASH || this.negativeFormat == this.PARENTHESIS) n0 = negSignL;
      if (this.negativeFormat == this.RIGHT_DASH || this.negativeFormat == this.PARENTHESIS) n3 = negSignR;
    }
    if (this.hasCurrency) c1 = this.currencyValue;
  }
  else if (this.currencyPosition == this.RIGHT_INSIDE) {
		if (nNum < 0) {
			if (this.negativeFormat == this.LEFT_DASH || this.negativeFormat == this.PARENTHESIS) n0 = negSignL;
			if (this.negativeFormat == this.RIGHT_DASH || this.negativeFormat == this.PARENTHESIS) n3 = negSignR;
		}
		if (this.hasCurrency) c2 = this.currencyValue;
	}
	else if (this.currencyPosition == this.RIGHT_OUTSIDE) {
		if (nNum < 0) {
			if (this.negativeFormat == this.LEFT_DASH || this.negativeFormat == this.PARENTHESIS) n1 = negSignL;
			if (this.negativeFormat == this.RIGHT_DASH || this.negativeFormat == this.PARENTHESIS) n2 = negSignR;
		}
		if (this.hasCurrency) c3 = this.currencyValue;
	}
	nStr = c0 + n0 + c1 + n1 + nStr + n2 + c2 + n3 + c3;
	if (this.negativeRed && nNum < 0) {
		nStr = '<font color="red">' + nStr + '</font>';
	}
	return (nStr);
}

function toPercentageNF()
{
  nNum = this.num * 100;
  nNum = this.getRounded(nNum);
  return nNum + '%';
}

function getZerosNF(places)
{
  var extraZ = '';
  var i;
  for (i=0; i<places; i++) {
    extraZ += '0';
  }
  return extraZ;
}

function expandExponentialNF(origVal)
{
  if (isNaN(origVal)) return origVal;
  var newVal = parseFloat(origVal) + ''; 
  var eLoc = newVal.toLowerCase().indexOf('e');
  if (eLoc != -1) {
    var plusLoc = newVal.toLowerCase().indexOf('+');
    var negLoc = newVal.toLowerCase().indexOf('-', eLoc); 
    var justNumber = newVal.substring(0, eLoc);
    if (negLoc != -1) {
      var places = newVal.substring(negLoc + 1, newVal.length);
      justNumber = this.moveDecimalAsString(justNumber, true, parseInt(places));
    } else {
      if (plusLoc == -1) plusLoc = eLoc;
      var places = newVal.substring(plusLoc + 1, newVal.length);
      justNumber = this.moveDecimalAsString(justNumber, false, parseInt(places));
    }
    newVal = justNumber;
  }
  return newVal;
}

function moveDecimalRightNF(val, places)
{
  var newVal = '';
  if (places == null) {
    newVal = this.moveDecimal(val, false);
  } else {
    newVal = this.moveDecimal(val, false, places);
  }
  return newVal;
}

function moveDecimalLeftNF(val, places)
{
  var newVal = '';
  if (places == null) {
    newVal = this.moveDecimal(val, true);
  } else {
    newVal = this.moveDecimal(val, true, places);
  }
  return newVal;
}

function moveDecimalAsStringNF(val, left, places)
{
  var spaces = (arguments.length < 3) ? this.places : places;
  if (spaces <= 0) return val; 
  var newVal = val + '';
  var extraZ = this.getZeros(spaces);
  var re1 = new RegExp('([0-9.]+)');
  if (left) {
    newVal = newVal.replace(re1, extraZ + '$1');
    var re2 = new RegExp('(-?)([0-9]*)([0-9]{' + spaces + '})(\\.?)');		
    newVal = newVal.replace(re2, '$1$2.$3');
  } else {
    var reArray = re1.exec(newVal); 
    if (reArray != null) {
      newVal = newVal.substring(0,reArray.index) + reArray[1] + extraZ + newVal.substring(reArray.index + reArray[0].length); 
    }
    var re2 = new RegExp('(-?)([0-9]*)(\\.?)([0-9]{' + spaces + '})');
    newVal = newVal.replace(re2, '$1$2$4.');
  }
  newVal = newVal.replace(/\.$/, ''); 
  return newVal;
}

function moveDecimalNF(val, left, places)
{
var newVal = '';
if (places == null) {
newVal = this.moveDecimalAsString(val, left);
} else {
newVal = this.moveDecimalAsString(val, left, places);
}
return parseFloat(newVal);
}
function getRoundedNF(val)
{
val = this.moveDecimalRight(val);
if (this.truncate) {
val = val >= 0 ? Math.floor(val) : Math.ceil(val); 
} else {
val = Math.round(val);
}
val = this.moveDecimalLeft(val);
return val;
}
function preserveZerosNF(val)
{
var i;
val = this.expandExponential(val);
if (this.places <= 0) return val; 
var decimalPos = val.indexOf('.');
if (decimalPos == -1) {
val += '.';
for (i=0; i<this.places; i++) {
val += '0';
}
} else {
var actualDecimals = (val.length - 1) - decimalPos;
var difference = this.places - actualDecimals;
for (i=0; i<difference; i++) {
val += '0';
}
}
return val;
}

function justNumberNF(val)
{
  newVal = val + '';
  var isPercentage = false;
  if (newVal.indexOf('%') != -1) {
    newVal = newVal.replace(/\%/g, '');
    isPercentage = true; 
  }
  var re = new RegExp('[^\\' + this.inputDecimalValue + '\\d\\-\\+\\(\\)eE]', 'g');	
  newVal = newVal.replace(re, '');
  var tempRe = new RegExp('[' + this.inputDecimalValue + ']', 'g');
  var treArray = tempRe.exec(newVal); 
  if (treArray != null) {
    var tempRight = newVal.substring(treArray.index + treArray[0].length); 
    newVal = newVal.substring(0,treArray.index) + this.PERIOD + tempRight.replace(tempRe, ''); 
  }
  if (newVal.charAt(newVal.length - 1) == this.DASH ) {
    newVal = newVal.substring(0, newVal.length - 1);
    newVal = '-' + newVal;
  }
  else if (newVal.charAt(0) == this.LEFT_PAREN
  && newVal.charAt(newVal.length - 1) == this.RIGHT_PAREN) {
    newVal = newVal.substring(1, newVal.length - 1);
    newVal = '-' + newVal;
  }
  newVal = parseFloat(newVal);
  if (!isFinite(newVal)) {
    newVal = 0;
  }
  if (isPercentage) {
    newVal = this.moveDecimalLeft(newVal, 2);
  }
  return newVal;
}

function encode64(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 decode64(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;
}
