// JavaScript Library version 2.03 from 09/06/2002 Author = LF
// ------------------------------------------------------------------
// convert string to trimed not-null string, ignoring spaces
function StoS(str_in) {
	var str_out = "";
	if ( (!str_in) || (str_in == null) || (trim(str_in) == "") ) { return str_out; }
	else { str_out = "" + trim(str_in); } 
	return str_out;		
} // end StoS
// ------------------------------------------------------------------------------
// convert string to integer, ignoring spaces & leading zeroes, & rounding up
function StoI(str) {
	str       = StoS(str);
	var i     = 0;
	var flag1 = 0;
	var flag2 = 0;
	var flag3 = 0;
	var bad   = 0;
	if ( str != "" ) { // if zero
		FOR1: for (var k = 0; k < str.length; k++) { // FOR1
			var sub = str.substring(k,k+1);
			if ( sub == "-" ) { flag1++ ; continue FOR1; }
			else { // if "-"
				if ( (sub == "+") || (isNumeric(sub)) || (sub == ".") ) { 	
					if ( sub == "+" ) { flag2++; } 
					if ( sub == "." ) { flag3++; }	
					continue FOR1; 
				} else {
					bad = 1;
					break FOR1;
				} // end if "+"
			} // end if "-"
		} // end FOR1
		if ( (bad == 0) && (flag1 < 2) && (flag2 < 2) && (flag3 <2) ) { // if bad
			i = 1 * str;			
		} // end if bad 
	} // end if zero
	return 1*i;		
} // end StoI()
// -------------------------------------------------------------------------------
// check_date for valid date from format 2001-12-31  YYYY-MM-DD          
function isDate(str) {
var b = false;
	str = StoS(str);
	if ( (str != "") && (str.length == 10) ) { // if zero
		var YYYY = str.substring(0,4);
		var MM   = str.substring(5,7);
		var DD   = str.substring(8,10);
		if ( (str.substring(4,5) != "-") || (str.substring(7,8) != "-") || 
		(!isNum(YYYY)) || (!isNum(MM)) || (!isNum(DD)) ) { return b; } // if 1
		else { // else 1
			var y = StoI(YYYY);
			var m = StoI(MM);
			var d = StoI(DD);
			if ( (y > 2050) || (y < 1990) || (m > 12) || (m < 1) || (d > 31) || (d < 1) ) { return b; } // if 2
			else { // else 2
				if (((m == 4) || (m == 6) || (m == 9) || (m == 11)) && (d > 30)) {
					return b;  // if 3
				} else { 
					if ( (m == 2) && (d > 29) )	{ // if 29
						return b; 
					} else {
						if ( (m == 2) && (d > 28) && ( (y % 4) > 0) ) {
							return b;
						}
					} // end if 29
					b = true; 
				} // else if 3
			} // end if 2
		} // end if 1
	} // end if zero
	return b;
} // end isDate()
//-------------------------------------------------------------------------------
// check_dates validates if date range is valid for str-date in format
// yyyy-mm-dd ;  fromdate must be <= todate
function check_dates(fromday, frommonth, fromyear, today, tomonth, toyear) {
	var b = false;
	if ( !isDate(StoS(fromyear)+"-"+StoS(frommonth)+"-"+StoS(fromday)) || 
		!isDate(StoS(toyear)+"-"+StoS(tomonth)+"-"+StoS(today)) ) {return b;}// if 1
	else { // else 1
		var y1 = StoI(fromyear);
		var m1 = StoI(frommonth);
		var d1 = StoI(fromday);
		var y2 = StoI(toyear);
		var m2 = StoI(tomonth);
		var d2 = StoI(today);
		if ( (y1 > y2) || ((y1 == y2) && (m1 > m2)) || ((y1 == y2) && (m1 == m2) 
		  && (d1 > d2)) ) { return b; }
		b = true;
	} // end if 1
	return b;
} // end check_dates()
//----------------------------------------------------------------------------
// to determine if arg = Numeric
function isNum(numVal) {
	numVal = StoS(numVal);
	b = false;
	if ( numVal != "" ) { // if ""
	    for ( i = 0; i < numVal.length; i++ ) {
			if (numVal.charAt(i) < "0" || numVal.charAt(i) > "9") { return b; }
		} // end for;
		b = true;
	} // end if ""
	return b;
} // end isNum() 
// ------------------------------------------------------------------
function ltrim(str_in) {
	var str_out = "";
	var e = " ";
	if ( !((str_in == null) || (str_in == e) || (str_in == "")) ) { // if nul
		str_out = str_in;
		var len = str_out.length;
		var wlen = len;
		FOR1: for (var i=0; i< len; i++) {
			if (str_out.indexOf(e,0) == 0) { // if ==0
				if (wlen > 1) {	str_out = str_out.substr(1,wlen); 
				} else { break; }
			} else { break;  } // end if ==0
			wlen = str_out.length;
		} // end FOR1
	} // end if nul
	return str_out;
} // end ltrim()
// -----------------------------
function rtrim(str_in) {
	var str_out = "";
	var e = " ";
	if ( !((str_in == null) || (str_in == e) || (str_in== ""))  ) { // if nul
		str_out = str_in;
		var len = str_out.length;
		var wlen = len;
		FOR1: for (var i=0; i< len; i++) {
			if (wlen > 1) { // if wlen>1
				if (str_out.indexOf(e,wlen-1) == wlen-1) {
					str_out = str_out.substr(0,wlen-1) 
				} else {
				 break; }
			} else { // else wlen>1
				if ( str_out == e ) { str_out = "";}
				break;
			} // end if wlen>1

			wlen = str_out.length;
		} // end FOR1
	} // end if nul
	return str_out;
} // end ltrim()
// -----------------------------
function trim(str_in) {
	var str_out = rtrim(ltrim(str_in));
	return str_out;
} // end trim()
// ------------------------------
function isNumeric(str) {
	var b = false;
	if ( (str != null) || ( !(trim(str) == "")) ) { // not zero or empty str
		str = trim(str);
		if ( str == "0" || str == "1" || str == "2" || str == "3"
		|| str == "4" || str == "5" || str == "6" || str == "7"
		|| str == "8" || str == "9" ) { b = true; }
	}
	return b;
} // end isNumeric()
// -------------------------------------------------------------------		
function isDecNumber(str_in) {
	var str_out   = ""; 
	var dots  = 0;
	var first = 0;
	var decs  = 0;
	var len   = 0;
	if ( (str_in == null) || (trim(str_in) == "") ) { // zero str_in
		str_out = ""; return false;
	} else {  // else zero
		str_out = trim(str_in);
		var sub = null;
		len = str_out.length; 
		var wlen = len;
		
		FOR1: for ( var i=0; i<len; i++) { // FOR1
		
			if (wlen > 1) { // if wlen>1
		
				sub = str_out.substring(0,1);
				
				if (isNumeric(sub)) { // if	isNum 						

					if (dots == 1) { decs++; }
					else { first++; }
				} else { // else isNum

					if ( sub == "." ) { // if .
						dots++;
						if (dots > 1) { return false; }
					} else { return false; } // end if .						
				} // end if-else isNum
	
				str_out = str_out.substr(1,wlen-1);

			} else { // else wlen >1
			
				sub = str_out;
				
				if (isNumeric(sub)) { // if	isNum2 	

					if (dots == 1) { decs++; }
					else { first++; }
				} else { // else isNum2

					if ( sub == "." ) { // if .
						dots++;
						if (dots > 1) { return false; }
					} else { return false; } // end if .						
				} // end if-else isNum2					
			
			str_out = "";						
			} // end wlen>1
	
			wlen = str_out.length;
		} // end FOR1:
	} // end if-else zero
	if ( (dots > 1) || ((dots == 1) && (first == 0) && (decs == 0)) ) { return false; }
	return true;
} // end IsDecNumber()	
// ----------------------------------------------------------------------
function isNumDot(numVal) {
    for (i = 0; i < numVal.length; i++) {
        if ( !isNumericDot(numVal.charAt(i)) ) { return false; }
	}
    return true;
} // to determine if arg = Numeric
// ------------------------------------------------------------------
// simple e-mail validation: to find @ within
function check_email(email) {
	var valid = 0;
	var reg  = new RegExp("@");
	if ( email != null && email.search(reg) > 0 ) {
		valid = 1;
	}
	return valid;
}
// ------------------------------------------------------------------
function IsEmailValid(email){
  var emailOk = true;
  var temp   = email;
  var atSym  = temp.value.indexOf('@');
  var dot1   = temp.value.indexOf('.');
  var dot2   = temp.value.lastIndexOf('.');
  var space  = temp.value.indexOf(' ');
  var length = temp.value.length - 1;	// Array is from 0 to length-1

  if ((atSym < 1) ||			// '@' cannot be in first position
      (dot2 <=  atSym+1) ||		// Must be at least one valid char btwn '@' and '.'
      (dot2   == length) ||		// Must be at least one valid char after '.'
      (space != -1)      ||			// No empty spaces permitted
	  (dot1 < 1)         ||      // no . or leading .
	  (length < 5) )             // min e-mail length
    {
      emailOk = false;
    }
  return emailOk;
}  // end of IsEmailValid()
// ------------------------------------------------------------------
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
//-----------------------------------------------------------------
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
//-------------------------------------------------------------------------------------
function MM_findObj(n, d) { //v3.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}
//--------------------------------------------------------------------------------
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//------------------------------------------------------------------------------------
// to display status msg
function MM_displayStatusMsg(msgStr) { //v2.0
	status = msgStr;
	document.MM_returnValue = true;
}
//------------------------------------------------------------------------------
// return true for valid Credit card #  VI & MC - ok, check on DI, AX, BA, rent c
function isCreditCard(str) {
	var b = false;
	str = trim(str);
	var len = str.length;
	if ( (str == null) || (str == ("")) || (len < 11) || (len > 17) || !isNum(str)) 
	{ return b; } 
	else { // else ""

	if ( str.substring(0,10) == "0123456789") { return true; }

  		a  = new Array;	c  = new Array;	
		a1 = new Array;	c1 = new Array;	a2 = new Array;

		var k = 0;
		for (var i=len-2; i >= 0 ; i--) {
			a[k] =  str.charAt(i);
			a1[k] = 2 * a[k];
			a2[k] = a1[k] + "";
			i--; k++;
		} 

		a1[k] = 0;
		a2[k] = "0";

		k = 0;
		for (var i=len-3; i >= 0 ; i--) {
			c[k]  = str.charAt(i);
			c1[k] = 1*c[k];
			i--; k++;
		} // end for
		c1[k] = 0;

		var sum = 0;
		for (var i=0; i < len/2 ; i++)
		{
			if ( a2[i].length == 2 ) { 
				var f1 = a2[i].substr(0,1);
				var f2 = a2[i].substr(1);
				a1[i] = 1*f1 + 1*f2;
			}
			sum = 0 + sum + a1[i] + c1[i];
		} // end for

		var sumS = "" + sum;
		var ss2  = "" + sumS.substr(0,1);
	
		var ss3 = 0;
		if (sumS.substring(1) == "0") { ss3 = 1*ss2; }
		else { ss3 = 1*ss2 + 1; }
			
		var first = 10 * ss3;
		var last_char = str.substr(len-1);

		if ( (first - sum ) == (1*last_char) ) { b = true; }

	} // end if ""
return b;
} // end isCreditCard
//-------------------------------------------------------------------
// return selected value for element selectObject (<select>,<checkbox>, etc)
function getSelectedValue(selectObject) { 
	return selectObject.options[selectObject.selectedIndex].value;
} // end getSelectedValue()
//--------------------------------------------------------------------
// return credit card type from CC #, for non-defined = "". Carefull - work out with isCreditCard() required for correct card # + find out length of card
function cardType(ccno) { 
	var cardtype = "";
	ccno = StoS(ccno);
	if ( (ccno.length >= 13) && (ccno.length <= 17) ) { // if > 13
		SW: switch ( ccno.substring(0,1) ) { // switch main
			case "1" :
				cardtype = "JCB";
				break SW;
			case "2" :
                cardtype = "JCB";
				break SW;
            case "3" :

				SW2: switch ( ccno.substring(0,2) ) { // switch2
					case "30" :      
						cardtype = "DinersClub";
						break SW;
					case "36" :                        
						cardtype = "DinersClub";
						break SW;
					case "38" :                          
						cardtype = "DinersClub";
						break SW;
					case "34" :                         
						cardtype = "Amex";
						break SW;
					case "37" :                            
						cardtype = "Amex";
						break SW;
					case "35" :                        
						cardtype = "JCB";
						break SW;
				} // end switch2

				break;

				case "4" :
					cardtype = "Visa";
					break SW;	
				case "5" :
					if ( ccno.substring(0,4) == "5610" ) { // if 5610
						cardtype = "Bankcard";
						break SW;
					} else { // else 5610
						if ( ccno.substring(0,3) == "560" ) { 
							cardtype = "DebitCard";
							break SW;
						}
					} // end if 5610

					SW3: switch ( ccno.substring(0,2) ) { // switch3
						case "51" :      
							cardtype = "MasterCard";
							break SW;
						case "52" :                        
							cardtype = "MasterCard";
							break SW;
						case "53" :                        
							cardtype = "MasterCard";
							break SW;
						case "54" :                        
							cardtype = "MasterCard";
							break SW;
						case "55" :                       
							cardtype = "MasterCard";
							break SW;
						case "50" :                        
							cardtype = "DebitCard";
							break SW;
						default :
							cardtype = "DebitCard";
							break SW;
						
					} // end switch3
                  
				case "6" :
					cardtype = "Discover";
					break SW;
		} // end switch main
	} // end if > 13
	return cardtype;
} // end cardType()
//----------------------------------------------------------------
// get day as word from dd                      
function getDay(dd) {
	var day = "";
	dd      = prezero(dd, 2);      
	if ( (dd.length == 2) && isNum(dd) && (1*dd >= 0) && (1*dd <= 6) ) { // if day
		switch (dd) { // switch
			case "00" : day = "Sunday";    break;
			case "01" : day = "Monday";    break;
			case "02" : day = "Tuesday";   break;
			case "03" : day = "Wednesday"; break;
			case "04" : day = "Thursday";  break;
			case "05" : day = "Friday";    break;
			case "06" : day = "Saturday";  break;
		} // end switch
	} // end if day
	return day;    
} // end getDay()
//----------------------------------------------------------------
// get month as word from mm                      
function getMonth(mm) {
	var month = "";
	mm        = prezero(mm, 2);
	if ( (mm.length == 2) && isNum(mm) && (1*mm >= 1) && (1*mm <= 12) ) { // if mm
		switch (mm) { // switch
			case "01" : month = "January";   break;
			case "02" : month = "February";  break;
			case "03" : month = "March";     break;
			case "04" : month = "April";     break;
			case "05" : month = "May";       break;
			case "06" : month = "June";      break;
			case "07" : month = "July";      break;
			case "08" : month = "August";    break;
			case "09" : month = "September"; break;
			case "10" : month = "October";   break;
			case "11" : month = "November";  break;
			case "12" : month = "December";  break;
		} // end switch
	} // end if mm
	return month;
} // end getMonth()
//----------------------------------------------------------------
// return last day of the supplied month in year
function getLastDay(mm, yyyy) {
	var lastDay = "28";
	mm   = prezero(mm, 2);
	yyyy = StoS(yyyy);
	if ( (mm.length == 2) && isNum(mm) && (yyyy.length == 4) && isNum(yyyy) ) { // if mm
		if ((1 * mm >= 1) && (1*mm <= 12) && (1*yyyy >= 1900) && (1*yyyy <= 2100)) { //if 1
			if ( (mm == "01") || (mm == "03") || (mm == "05") || (mm == "07") || (mm == "08") || (mm == "10") || (mm == "12") ) { // if 01
				lastDay = "31";
			} else { // else 01
				if ( (mm == "04") || (mm == "06") || (mm == "09") || (mm == "11") ) { // if 04
					lastDay = "30";
				} else { // else 04
					if ( (yyyy % 4) == 0 ) { lastDay = "29"; }
				} // end if 04
			} // end if 01 
		} // end if 1
	} // end if mm
	return lastDay;
} // end getLastDay()
//----------------------------------------------------------------
// pre zero (add leading zeroes) to string become il-characters long . Let il=5
// prezero(null) = ~("") = ~("") = ~("   ") = "00000" 
// prezero("12") = "00012"  ~(" 123") = "00123"  ~("12345") = "12345" ~("123456") = "123456"
// prezero("   1234567") = "1234567" - careful: return truncated
function prezero(str_in, il) {
	var str_out = ""; 
	str_in = StoS(str_in);
	il = 1 * il;
	if ( str_in == "" ) { // zero or empty str_in
		if ( il <= 0 ) { return str_out; } // negative-zero il-parameter
		else {
			for ( i = 0; i < il; i++) { str_out = "0" + str_out; } //creates "00"
		}
	} else {  // if some str supplied 
		str_out = str_in;
		var len = str_out.length;
		if ( len >= il) { return str_out; } // if length is already greater - return as is
		else { // working case - 
			for ( i = len; i < il; i++) { str_out = "0" + str_out; } // pre-zero string
		}
	}
	return str_out;
} // end prezero()
//-------------------------------------------------------------------------------------
// today date time constructor  : careful - year (which ends in 9x) assumed to be 199x
function getToday() { 
	var currDateTime = new Date();
	var year = StoS(currDateTime.getYear());
	var len = year.length;
	var yy = year.substring(len-2);
	if ( (1 * yy >= 90) && (1 * yy <= 99) ) { yyyy = "19" + yy; }
	else { yyyy = "20" + yy; }

	this.dd          = prezero(currDateTime.getDate(), 2);      // date: 31 
	this.mm          = prezero(currDateTime.getMonth() + 1, 2); // month as 02 for Feb
	this.month       = getMonth(this.mm);                       // month as March for 03
	this.yyyy        = yyyy;                                    // yyyy
	this.dow         = prezero(currDateTime.getDay(), 2);       // dayOfWk: start from 0 = Sun
	this.day         = getDay(this.dow);                        // day as Monday for 1
	this.sec         = prezero(currDateTime.getSeconds(), 2);   // seconds: 59
	this.min         = prezero(currDateTime.getMinutes(), 2);   // minutes: 41
	this.hours       = prezero(currDateTime.getHours(), 2);     // hours:   23
return this;
} // end getToday()
//-----------------------------------------------------------------------
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
} // end MM_reloadPage()
//-----------------------------------------------------------------------
