// TLS Common.JS Library
// Copyright (c) 2004 TILISOFT. All rights reserved.
// http://www.tilisoft.com - info@tilisoft.com
// 
// The TLS Common.JS Library ("Library") is copyrighted by TILISOFT ("Vendor"), all rights reserved. 
// The library or any part of it may not be used, modified, sold, published or distributed without
// express permission from the Vendor.



var _tlsCmnBrw = new clsBrowser()
var _tlsCmnObj = new clsObject()
var _tlsCmnStr = new clsString()
var _tlsCmnNum = new clsNumber()
var _tlsCmnDT = new clsDateTime()



// BEGIN: clsBrowser
function clsBrowser() {
	this.IsIE = (navigator.appName == "Microsoft Internet Explorer") ? 1 : 0;
	this.IsNS = (navigator.appName == "Netscape") ? 1 : 0;
}
// END: clsBrowser



// BEGIN: clsObject
function clsObject() {
	this.Get = Get
	this.FindInForms = FindInForms
	this.GetLeft = GetLeft
	this.GetAbsoluteLeft = GetAbsoluteLeft
	this.GetTop = GetTop
	this.GetAbsoluteTop = GetAbsoluteTop
	this.GetWidth = GetWidth
	this.GetHeight = GetHeight
	
	function Get(ID) {
		var doc = ( Get.arguments.length == 2 ) ? Get.arguments[1] : document
		var obj = doc.getElementById(ID)
		if ( !obj ) obj = FindInForms(ID, doc)
		return obj;
	} //Get
	
	function FindInForms(ID) {
		var doc = ( FindInForms.arguments.length == 2 ) ? FindInForms.arguments[1] : document		
		var f, e, frm, el;		
		var objName = ID.toUpperCase();
		
		for (f=0; f<doc.forms.length; f++) {
			frm = doc.forms[f];
			for (e=0; e<frm.elements.length; e++) {
				el = frm.elements[e];
				if ( el.name.toUpperCase() == objName || el.id.toUpperCase() == objName )
					return el;
			}	
		}
		
		return null;
	} //FindInForms

	function GetLeft(ID) { 
		var doc = ( GetLeft.arguments.length == 2 ) ? GetLeft.arguments[1] : document		
		var obj = Get(ID, doc)
		var lngRet = (obj) ? obj.offsetLeft : 0
		
		return lngRet
	} //GetLeft

	function GetAbsoluteLeft(ID) {
		var doc = ( GetAbsoluteLeft.arguments.length == 2 ) ? GetAbsoluteLeft.arguments[1] : document		
		var obj = Get(ID, doc)
		var objParent
		var lngRet = (obj) ? obj.offsetLeft : 0
		//var ids = ""
		
		while (obj.offsetParent != null) {
			//ids += obj.id + ","
			objParent = obj.offsetParent
			lngRet += objParent.offsetLeft
			obj = objParent
		}
		//alert(ids)
		return lngRet
	} //GetAbsoluteLeft

	function GetTop(ID) { 
		var doc = ( GetTop.arguments.length == 2 ) ? GetTop.arguments[1] : document		
		var obj = Get(ID, doc)
		var lngRet = (obj) ? obj.offsetTop : 0
		
		return lngRet
	} //GetTop

	function GetAbsoluteTop(ID) {
		var doc = ( GetAbsoluteTop.arguments.length == 2 ) ? GetAbsoluteTop.arguments[1] : document		
		var obj = Get(ID, doc)
		var objParent
		var lngRet = (obj) ? obj.offsetTop : 0
		//var ids = ""
		
		while (obj.offsetParent != null) {
			//ids += obj.id + ","
			objParent = obj.offsetParent
			lngRet += objParent.offsetTop
			obj = objParent
		}
		//alert(ids)
		return lngRet
	} //GetAbsoluteTop

	function GetWidth(ID) { 
		var doc = ( GetWidth.arguments.length == 2 ) ? GetWidth.arguments[1] : document		
		var obj = Get(ID, doc)
		var lngRet = (obj) ? obj.offsetWidth : 0
		
		return lngRet
	} //GetWidth

	function GetHeight(ID) { 
		var doc = ( GetHeight.arguments.length == 2 ) ? GetHeight.arguments[1] : document		
		var obj = Get(ID, doc)
		var lngRet = (obj) ? obj.offsetHeight : 0
		
		return lngRet
	} //GetHeight
}
// END: clsObject




// BEGIN: clsString
function clsString() {
	this.Replace = Replace
	this.Pad = Pad
	
	function Replace(source, from, to) {
		var re = new RegExp(from, 'gi'); // gi = Global, case-Insensitive
		return source.replace(re, to);
	} //Replace

	function Pad(source, newLength, padChar, padFront) {
		var pad = "";
		var len = newLength - String(source).length;
		var i;
	  
		for (i = 0; i < len; i++) {
			pad += padChar;
		}
	  
		if ( padFront )
			return pad + source;
		else
			return source + pad;
	} //Pad
}
// END: clsString




// BEGIN: clsNumber
function clsNumber() {
	this.IsInteger = IsInteger
	
	function IsInteger(val) {
		var digits = "1234567890";
		for (var i=0; i < val.length; i++) {
			if (digits.indexOf(val.charAt(i)) == -1) { return false; }
		}
		return true;
	} //IsInteger
}
// END: clsNumber




// BEGIN: clsDateTime
function clsDateTime() {
	this.IsLeap = IsLeap
	this.IsDate = IsDate
	this.IsDateSerial = IsDateSerial
	this.AddDates = AddDates
	this.AddYears = AddYears
	this.AddMonths = AddMonths
	this.AddDays = AddDays
	this.DiffDays = DiffDays
	this.DaysInMonth = DaysInMonth
	
	
	function IsLeap(year) {
		return (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
	}
	
	function IsDate(dateStr) {
		var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/ // valid format mm/dd/yyyy or mm-dd-yyyy
		var matchArray = dateStr.match(datePat)

		if (matchArray == null) return false

		var month = matchArray[1]
		var day = matchArray[3]
		var year = matchArray[5]

		if ( month < 1 || month > 12 ) return false
		if ( day < 1 || day > 31 ) return false
		if ( (month==4 || month==6 || month==9 || month==11) && day==31 ) return false
		if ( month == 2 && (day > 29 || (day==29 && !IsLeap(year))) ) return false
		
		return true
	} //IsDate

	function IsDateSerial(year, month, day) {
		month = month - 1 // javascript month range : 0- 11
		
		var tempDate = new Date(year, month, day)
		
		if ( (getYear(tempDate.getYear()) == year) && (month == tempDate.getMonth()) && (day == tempDate.getDate()) )
			return true
		else
			return false
	} //IsDateSerial

	function AddDates(startDate, numDays, numMonths, numYears) {
		var returnDate = new Date(startDate.getTime())
		var yearsToAdd = numYears
		var month = returnDate.getMonth() + numMonths
		
		if (month > 11) {
			yearsToAdd = Math.floor((month+1)/12)
			month -= 12*yearsToAdd;
			yearsToAdd += numYears
		}
		
		returnDate.setMonth(month)
		returnDate.setFullYear(returnDate.getFullYear()	+ yearsToAdd)
		
		returnDate.setTime(returnDate.getTime()+60000*60*24*numDays)
		
		return returnDate
	} //AddDates

	function AddYears(startDate, numYears) {
		return AddDates(startDate, 0, 0, numYears)
	}

	function AddMonths(startDate, numMonths) {
		return AddDates(startDate, 0, numMonths, 0)
	}

	function AddDays(startDate, numDays) {
		return AddDates(startDate, numDays, 0, 0)
	}

	function DiffDays(firstDate, secondDate) {
		var d1 = new Date(firstDate)
		var d2 = new Date(secondDate)
		var diff = d1 - d2
		var days = new String(diff / 86400000)
		
		return -(parseInt(days))
	}
	
	function DaysInMonth(dtDate) {
		var monsDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
		var mon = dtDate.getMonth()	
		var days = monsDays[mon] // 0 = jan, 1 = feb
	
		return (mon+1 == 2 && IsLeap(dtDate)) ? 29 : days
	} //DaysInMonth
	
}
// END: clsDateTime

