var regExp = /<\/?[^>]+>/gi;
function ReplaceTags(xStr){
  xStr = xStr.replace(regExp,"");
  return xStr;
}
var szResultType = "";
var nX = 0;
var nY = 0;
function GetXY(e) {
	if (window.event) { e = window.event; };
	if (document.all){
		nX = event.clientX+5;
		nY = event.clientY+10;
	}
	else {
		nX = e.pageX+5;
		nY = e.pageY+10;
	}
	//}
/*
	if (IE)	{
		 var tmpX = event.clientX;
		 var tmpY = event.clientY;
		}	
	else 	{
			 var tmpX = m.pageX;
		 var tmpY = m.pageY;
		}  
	if (!document.body.scrollTop)
		{
		 var iL = document.documentElement.scrollLeft;	
		 var iV = document.documentElement.scrollTop;
		}
	else 	{
		 var iL = document.body.scrollLeft;	
		 var iV = document.body.scrollTop;	
		}
*/
}

var myAgent = navigator.userAgent.toLowerCase();
var myVersion = parseInt(navigator.appVersion);
var is_ie = ((myAgent.indexOf("msie") != -1) 
         && (myAgent.indexOf("opera") == -1));
var is_nav = ((myAgent.indexOf('mozilla')!=-1) 
           && (myAgent.indexOf('spoofer')==-1) 
           && (myAgent.indexOf('compatible') == -1) 
           && (myAgent.indexOf('opera')==-1)
           && (myAgent.indexOf('webtv') ==-1) 
           && (myAgent.indexOf('hotjava')==-1));
var is_win = ((myAgent.indexOf("win")!=-1) 
           || (myAgent.indexOf("16bit")!=-1));
var is_mac = (myAgent.indexOf("mac")!=-1);
var pageWidth = 0, pageHeight = 0;

     if( typeof( window.innerWidth ) == 'number' ) {
       pageWidth = window.innerWidth;
       pageHeight = window.innerHeight;
     }
     else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
       //IE 6+ in 'standards compliant mode'
       pageWidth = document.documentElement.clientWidth;
       pageHeight = document.documentElement.clientHeight;
     }
     else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
       //IE 4 compatible
       pageWidth = document.body.clientWidth;
       pageHeight = document.body.clientHeight;
     }

function IsNumeric(String)//Positive and Negative Numbers.
{
	var ValidDigits = "()- ./0123456789";
	var Digit;
	var bOpenBracket = false;
	var bCloseBracket = false;
	var bDash = false;
	var bDecimal = false;
	var bValid = true;
	var Len = String.length;
	
	//characters can be only . or a digit, but only one decimal.
	for(var nIndex = 0; nIndex < Len && bValid; nIndex++)
	{
		check_char = ValidDigits.indexOf(String.charAt(nIndex));
		if(check_char < 0){bValid = false;}//not a valid number (including spaces or decimals or parenthesis)
		if(check_char == 0){bOpenBracket ? bValid=false : bOpenBracket=true;}//( 
		if(check_char == 1){bCloseBracket ? bValid=false : bCloseBracket=true;}//( 
		if (check_char == 2){bDash ? bValid=false : bDash=true;}//-
		if (check_char == 4){bDecimal ? bValid=false : bDecimal=true;}//.
	}	
    return bValid;
}
function isValidDate(dateStr) {
	// Checks for the following valid date formats:
	// MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/; // requires 4 digit year

	var matchArray = dateStr.match(datePat); // is the format ok?
	if (matchArray == null) {
		alert(dateStr + " Date is not in a valid format.")
		return false;
	}
	month = matchArray[1]; // parse date into variables
	day = matchArray[3];
	year = matchArray[4];
	if (month < 1 || month > 12) { // check month range
		alert("Month must be between 1 and 12.");
		return false;
	}
	if (day < 1 || day > 31) {
		alert("Day must be between 1 and 31.");
		return false;
	}
	if ((month==4 || month==6 || month==9 || month==11) && day==31) {
		alert("Month "+month+" doesn't have 31 days!")
		return false;
	}
	if (month == 2) { // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap)) {
		alert("February " + year + " doesn't have " + day + " days!");
		return false;
    }
    }
	return true;
}

function IsValidEmail(szEmail)
{
	var bValid = true;
	var nAtPos = szEmail.indexOf('@');

	if (nAtPos <= 0 || nAtPos >= szEmail.length-4) {bValid =false;}
	if (szEmail.indexOf('@.') >=  0 || szEmail.indexOf('.@') >=  0) {bValid =false;}

	if (szEmail.charAt(szEmail.length-4) != '.' && szEmail.charAt(szEmail.length-3) != '.') {bValid =false;}
	
	return bValid;
}

function isValidCreditCard(cardNumber, cardType)
{
  var isValid = false;
  var ccCheckRegExp = /[^\d ]/;
  isValid = !ccCheckRegExp.test(cardNumber);

  if (isValid)
  {
    var cardNumbersOnly = cardNumber.replace(/ /g,"");
    var cardNumberLength = cardNumbersOnly.length;
    var lengthIsValid = false;
    var prefixIsValid = false;
    var prefixRegExp;

    switch(cardType)
    {
      case "mastercard":
        lengthIsValid = (cardNumberLength == 16);
        prefixRegExp = /^5[1-5]/;
        break;

      case "visa":
        lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
        prefixRegExp = /^4/;
        break;

      case "amex":
        lengthIsValid = (cardNumberLength == 15);
        prefixRegExp = /^3(4|7)/;
        break;

      default:
        prefixRegExp = /^$/;
        alert("Card type not found");
    }

    prefixIsValid = prefixRegExp.test(cardNumbersOnly);
    isValid = prefixIsValid && lengthIsValid;
  }

  if (isValid)
  {
    var numberProduct;
    var numberProductDigitIndex;
    var checkSumTotal = 0;

    for (digitCounter = cardNumberLength - 1; digitCounter >= 0; digitCounter--)
    {
      checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
      digitCounter--;
      numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
      for(var productDigitCounter = 0;productDigitCounter < numberProduct.length;productDigitCounter++)
      {
        checkSumTotal += 
          parseInt(numberProduct.charAt(productDigitCounter));
      }
    }

    isValid = (checkSumTotal % 10 == 0);
  }

	if(cardNumber=="1111 1111 1111 1111")
	{
		isValid = true;
	}
		
  return isValid;
}
function insertAtCursor(myField, myValue) { //This is for inserting into Text areas (Report Body and Emailer)
	//IE support
	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange();
		sel.text = myValue;
	}
	//MOZILLA/NETSCAPE support
	else if (myField.selectionStart || myField.selectionStart == '0') {
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);
		myField.focus(myField.caretPos);
		//alert(myField.scrollHeight);
		myField.scrollTop = myField.scrollHeight;
	}
	else {
		myField.value += myValue;
	}
}
function showtip(e,nID){
	//if (document.readyState=="complete") {
		var sz = DataStuff["ReportDescription"+nID];
		if (document.all){
			var nPagePos = event.clientX+5;
			if(sz.length > 200) {nPagePos=nPagePos-250; }
			if(nPagePos < 0) {nPagePos=5; }
			document.all.DebtorInfo.innerHTML=sz;
			document.all.DebtorInfo.style.pixelLeft=nPagePos;
			document.all.DebtorInfo.style.pixelTop=event.clientY+10;
			document.all.DebtorInfo.style.visibility="visible";
		}
		else {
			var nPagePos = e.pageX+5;
			if(sz.length > 200) {nPagePos=nPagePos-250; }
			if(nPagePos < 0) {nPagePos=5; }
			document.getElementById("DebtorInfo").innerHTML = sz;
			document.getElementById("DebtorInfo").style.left=nPagePos;
			document.getElementById("DebtorInfo").style.top=e.pageY+10;
			document.getElementById("DebtorInfo").style.visibility ="visible";
		}
	//}
}

function hidetip(){
//	if (document.all) {document.all.DebtorInfo.style.visibility="hidden";}
	document.getElementById("DebtorInfo").style.visibility ="hidden";
}
function ShowPopup(sz, szDivID, bAutoHide) {
    if (!szDivID) { szDivID = "PopupBox"; };
    if (bAutoHide === undefined) { bAutoHide = true; };
    if (szDivID.length <= 0 || !document.getElementById(szDivID)) { szDivID = "PopupBox"; };
    if (szDivID == "DebtorInfo") { bAutoHide = false; };
    //if (document.readyState=="complete") {

    nY += 10;
    if ((nX + 500) > document.body.clientWidth) { nX = document.body.clientWidth - 500 - 50; };
    if (nX < 0) { nX = 5; }

    if (sz.length > 0) {
        if (!bAutoHide) {
            sz = "<DIV width='99%' height=12 align=right style='background-color:#FFFF00;width:99%;align=right;margin:0px;padding:0px;'><a href='JavaScript:HidePopup(\"" + szDivID + "\");'><img src='Graphics/close.gif' border=0 alt='Close' title='Close'></a></DIV><BR><BR>" + sz;

            document.getElementById(szDivID).onmouseout = "";
        } else {
            document.getElementById(szDivID).onmouseout = function () {
                this.innerHTML = '';
                this.style.visibility = 'hidden';
                this.visibility = 'hidden';
            };
        }
        //sz+="<BR>nX="+nX+"<BR>nY="+nY+"<BR>document.body.clientWidth="+document.body.clientWidth;

        //if(sz.length > 200) {nX=nX-250; }
        //if (document.all){document.all(szDivID).innerHTML=sz;  OR document.all.PopupBox.innerHTML=sz;	};

        document.getElementById(szDivID).innerHTML = sz;
    }
    if (document.getElementById(szDivID).innerHTML.length > 0) {
        if (document.all) {
            //document.all(szDivID).style.pixelLeft=nX+"px";  OR document.all.PopupBox.innerHTML=sz;
            //document.all(szDivID).style.pixelTop=nY+"px";
            //document.all(szDivID).style.visibility="visible";
            //document.getElementById(szDivID).innerHTML+=" -- nX:"+nX+" nY:"+nY;
            document.getElementById(szDivID).style.pixelLeft = nX + "px";
            document.getElementById(szDivID).style.pixelTop = nY + "px";
            document.getElementById(szDivID).style.left = nX + "px";
            document.getElementById(szDivID).style.top = nY + "px";
            document.getElementById(szDivID).style.visibility = "visible";
        }
        else {
            document.getElementById(szDivID).style.left = nX + "px";
            document.getElementById(szDivID).style.top = nY + "px";
            document.getElementById(szDivID).style.visibility = "visible";
        }
    }
}

function HidePopup(szDivID, bEmptyDIV) {
    if (bEmptyDIV == undefined) { bEmptyDIV = 1; };
    if (bEmptyDIV != 0) { bEmptyDIV = 1; };

    //	if (document.all) {document.all.PopupBox.style.visibility="hidden";}
    if (!szDivID) { szDivID = "PopupBox"; };
    if (szDivID.length <= 0 || !document.getElementById(szDivID)) { szDivID = "PopupBox"; };
    if (bEmptyDIV == 1) { document.getElementById(szDivID).innerHTML = ""; };
    document.getElementById(szDivID).style.visibility = "hidden";
    document.getElementById(szDivID).visibility = "hidden";
}

