function DetectBrowser() {
	/*
	Browser Sniffer Script-
	© Eddie Traversa (nirvana.media3.net)
	To add more shock to your site, visit http://www.java-scripts.net
	*/
 	var agt=navigator.userAgent.toLowerCase();
  	var agt=navigator.userAgent.toLowerCase();
    var is_major = parseInt(navigator.appVersion);
    var is_minor = parseFloat(navigator.appVersion);
    var is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
                && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
                && (agt.indexOf('webtv')==-1));
    var is_nav2 = (is_nav && (is_major == 2));
    var is_nav3 = (is_nav && (is_major == 3));
    var is_nav4 = (is_nav && (is_major == 4));
    var is_nav4up = (is_nav && (is_major >= 4));
    var is_navonly      = (is_nav && ((agt.indexOf(";nav") != -1) ||
                          (agt.indexOf("; nav") != -1)) );
    var is_nav5 = (is_nav && (is_major == 5));
    var is_nav5up = (is_nav && (is_major >= 5));
    var is_ie   = (agt.indexOf("msie") != -1);
    var is_ie3  = (is_ie && (is_major < 4));
    var is_ie4  = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.0")==-1) );
    var is_ie4up  = (is_ie  && (is_major >= 4));
    var is_ie5  = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.0")!=-1) );
    var is_ie5up  = (is_ie  && !is_ie3 && !is_ie4);
    var is_aol   = (agt.indexOf("aol") != -1);
    var is_aol3  = (is_aol && is_ie3);
    var is_aol4  = (is_aol && is_ie4);
    var is_opera = (agt.indexOf("opera") != -1);
    var is_webtv = (agt.indexOf("webtv") != -1);
	  
  	if (is_nav4up) {
		//location.href = netscape4URL; // netscape 4+ but not NS5
		return "netscape4";
    } else if (is_ie4up) { //IE4 & IE5 but returns IE4
		//location.href = explorer4URL;
		return "ie";
	} else if (is_webtv) { // Web TV
		//location.href = webtvURL;
		return "webtv";
	} else if (is_aol || is_aol3 || is_aol4) { //AOL
		//location.href = aolURL;
		return "aol";
	} else if (is_opera) { // Opera
		//location.href = operaURL;
		return "opera";
	} else if (is_ie3||is_nav3) { // 3.0 version browsers
		//location.href = version3URL;
		return "old"
	} else if (is_nav5up) { // Netscape 5
		//location.href = w3cURL;
		return "netscape5"
	}
}

function isValidURL(str){		
	//var reg1str = "^http:\/\/www.";
	var reg1str = "^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*[^\.\,\)\(\s]$";
 
	var reg1 = new RegExp(reg1str);
	if (reg1.test(str)) return true;
	return false;
}

function isValidEmail(str) {
	var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)";
	var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$";
	var reg1 = new RegExp(reg1str);
	var reg2 = new RegExp(reg2str);
	if (!reg1.test(str) && reg2.test(str)) return true;

	return false;
}

function trim(str){
   return str.replace(/^\s*|\s*$/g,"");
}

// Date Chk Function //

var tokPat=new RegExp("^month_strict|month|Month|MONTH|yyyy|YYYY|mins|MINS|mon_strict|ampm|AMPM|mon|Mon|MON|min|MIN|dd|DD|mm|MM|yy|YY|hh|HH|ss|SS|m|M|d|D|y|Y|h|H|s|S");
var lowerMonArr={jan:1, feb:2, mar:3, apr:4, may:5, jun:6, jul:7, aug:8, sep:9, oct:10, nov:11, dec:12}
var monPatArr=new Array();
monPatArr['mon_strict']=new RegExp(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/);
monPatArr['Mon']=new RegExp(/Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec/);
monPatArr['MON']=new RegExp(/JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC/);
monPatArr['mon']=new RegExp("jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec",'i');
var monthPatArr=new Array();
monthPatArr['month']=new RegExp(/^january|february|march|april|may|june|july|august|september|october|november|december/i);
monthPatArr['Month']=new RegExp(/^January|February|March|April|May|June|July|August|September|October|November|December/);
monthPatArr['MONTH']=new RegExp(/^JANUARY|FEBRUARY|MARCH|APRIL|MAY|JUNE|JULY|AUGUST|SEPTEMBER|OCTOBER|NOVEMBER|DECEMBER/);
monthPatArr['month_strict']=new RegExp(/^january|february|march|april|may|june|july|august|september|october|november|december/);
var cutoffYear=50;
function FormatToken (token, type) {
	this.token=token;
	this.type=type;
}
function parseFormatString (formatStr) {
	var tokArr=new Array;
	var tokInd=0;
	var strInd=0;
	var foundTok=0;
    while (strInd < formatStr.length) {
		if (formatStr.charAt(strInd)=="%" && (matchArray=formatStr.substr(strInd+1).match(tokPat)) != null) {
			strInd+=matchArray[0].length+1;
			tokArr[tokInd++]=new FormatToken(matchArray[0],"symbolic");
		}else{
			if (tokInd>0 && tokArr[tokInd-1].type=="literal") {
				tokArr[tokInd-1].token+=formatStr.charAt(strInd++);
			}else {
				tokArr[tokInd++]=new FormatToken(formatStr.charAt(strInd++), "literal");
			}
		}
	}
	return tokArr;
}


function buildDate(dateStr,formatStr) {
	var tokArr=parseFormatString(formatStr);
	var strInd=0;
	var tokInd=0;
	var intMonth;
	var intDay;
	var intYear;
	var intHour;
	var intMin;
	var intSec;
	var ampm="";
	var strOffset;
	var curdate=new Date();
	intMonth=curdate.getMonth()+1;
	intDay=curdate.getDate();
	intYear=curdate.getFullYear();
	intHour=0;
	intMin=0;
	intSec=0;
	while (strInd < dateStr.length && tokInd < tokArr.length) {
		if (tokArr[tokInd].type=="literal") {
			if (dateStr.indexOf(tokArr[tokInd].token,strInd)==strInd) {
				strInd+=tokArr[tokInd++].token.length;
				continue;
			}else{
				return "\"" + dateStr + "\" does not conform to the expected format: " + formatStr;
			}
		}
		switch (tokArr[tokInd].token) {
			case 'm':
			case 'M':
			case 'd':
			case 'D':
			case 'h':
			case 'H':
			case 'min':
			case 'MIN':
			case 's':
			case 'S':
				curChar=dateStr.charAt(strInd);
				nextChar=dateStr.charAt(strInd+1);
				matchArr=dateStr.substr(strInd).match(/^\d{1,2}/);
				if (matchArr==null) {
					switch (tokArr[tokInd].token.toLowerCase()) {
						case 'd': var unit="day"; break;
						case 'm': var unit="month"; break;
						case 'h': var unit="hour"; break;
						case 'min': var unit="minute"; break;
						case 's': var unit="second"; break;
					}
					return "Bad " + unit + " \"" + curChar + "\" or \"" + curChar +
					nextChar + "\".";
				}
				strOffset=matchArr[0].length;
				switch (tokArr[tokInd].token.toLowerCase()) {
					case 'd': intDay=parseInt(matchArr[0],10); break;
					case 'm': intMonth=parseInt(matchArr[0],10); break;
					case 'h': intHour=parseInt(matchArr[0],10); break;
					case 'min': intMin=parseInt(matchArr[0],10); break;
					case 's': intSec=parseInt(matchArr[0],10); break;
				}
				break;
			case 'mm':
			case 'MM':
			case 'dd':
			case 'DD':
			case 'hh':
			case 'HH':
			case 'mins':
			case 'MINS':
			case 'ss':
			case 'SS':
				strOffset=2;
				matchArr=dateStr.substr(strInd).match(/^\d{2}/);
				if (matchArr==null) {
					switch (tokArr[tokInd].token.toLowerCase()) {
						case 'dd': var unit="day"; break;
						case 'mm': var unit="month"; break;
						case 'hh': var unit="hour"; break;
						case 'mins': var unit="minute"; break;
						case 'ss': var unit="second"; break;
					}
					return "Bad " + unit + " \"" + dateStr.substr(strInd,2) + "\".";
				}
				switch (tokArr[tokInd].token.toLowerCase()) {
					case 'dd': intDay=parseInt(matchArr[0],10); break;
					case 'mm': intMonth=parseInt(matchArr[0],10); break;
					case 'hh': intHour=parseInt(matchArr[0],10); break;
					case 'mins': intMin=parseInt(matchArr[0],10); break;
					case 'ss': intSec=parseInt(matchArr[0],10); break;
				}
				break;
			case 'y':
			case 'Y':
				if (dateStr.substr(strInd,4).search(/\d{4}/) != -1) {
					intYear=parseInt(dateStr.substr(strInd,4),10);
					strOffset=4;
				}else{
					if (dateStr.substr(strInd,2).search(/\d{2}/) != -1) {
						intYear=parseInt(dateStr.substr(strInd,2),10);
						if (intYear>=cutoffYear) {
							intYear+=1900;
						}else{
							intYear+=2000;
						}
						strOffset=2;
					}else {
						return "Bad year \"" + dateStr.substr(strInd,2) + "\". Must be two or four digits.";
					}
				}
				break;
			case 'yy':
			case 'YY':
				if (dateStr.substr(strInd,2).search(/\d{2}/) != -1) {
					intYear=parseInt(dateStr.substr(strInd,2),10);
					if (intYear>=cutoffYear) {
						intYear+=1900;
					}else {
						intYear+=2000;
					}
					strOffset=2;
				}else{
					return "Bad year \"" + dateStr.substr(strInd,2) + "\". Must be two digits.";
				}
				break;
			case 'yyyy':
			case 'YYYY':
				if (dateStr.substr(strInd,4).search(/\d{4}/) != -1) {
					intYear=parseInt(dateStr.substr(strInd,4),10);
					strOffset=4;
				}else{
					return "Bad year \"" + dateStr.substr(strInd,4) + "\". Must be four digits.";
				}
				break;
			case 'mon':
			case 'Mon':
			case 'MON':
			case 'mon_strict':
				monPat=monPatArr[tokArr[tokInd].token];
				if (dateStr.substr(strInd,3).search(monPat) != -1) {
					intMonth=lowerMonArr[dateStr.substr(strInd,3).toLowerCase()];
				}else{
					switch (tokArr[tokInd].token) {
						case 'mon_strict': caseStat="lower-case"; break;
						case 'Mon': caseStat="mixed-case"; break;
						case 'MON': caseStat="upper-case"; break;
						case 'mon': caseStat="between Jan and Dec"; break;
					}
					return "Bad month \"" + dateStr.substr(strInd,3) + "\". Must be " + caseStat + ".";
				}
				strOffset=3;
				break;
			case 'month':
			case 'Month':
			case 'MONTH':
			case 'month_strict':
				monPat=monthPatArr[tokArr[tokInd].token];
				matchArray=dateStr.substr(strInd).match(monPat);
				if (matchArray==null) {
					return "Can't find a month beginning at \"" + dateStr.substr(strInd) + "\".";
				}
				intMonth=lowerMonArr[matchArray[0].substr(0,3).toLowerCase()];
				strOffset=matchArray[0].length;
				break;
			case 'ampm':
			case 'AMPM':
				matchArr=dateStr.substr(strInd).match(/^(am|pm|AM|PM|a\.m\.|p\.m\.|A\.M\.|P\.M\.)/);
				if (matchArr==null) {
					return "Missing am/pm designation.";
				}
				if (matchArr[0].substr(0,1).toLowerCase() == "a") {
					ampm = "am";
				}else{
					ampm = "pm";
				}
				strOffset = matchArr[0].length;
				break;
		}
		strInd += strOffset;
		tokInd++;
	}
	if (tokInd != tokArr.length || strInd != dateStr.length) {
		return "\"" + dateStr + "\" is either missing desired information or has more information than the expected format: " + formatStr;
	}
	if (intMonth < 1 || intMonth > 12) {
		return "Month must be between 1 and 12.";
	}
	if (intDay < 1 || intDay > 31) {
		return "Day must be between 1 and 31.";
	}
	if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && intDay == 31) {
		return "Month "+intMonth+" doesn't have 31 days!";
	}
	if (intMonth == 2) {
		var isleap=(intYear%4==0 && (intYear%100!=0 || intYear%400==0));
		if (intDay > 29 || (intDay == 29 && !isleap)) {
			return "February " + intYear + " doesn't have " + intDay + " days!";
		  }
	}
	if (ampm == "") {
		if (intHour < 0 || intHour > 23) {
			return "Hour must be between 0 and 23 for military time.";
		}
	}else {
		if (intHour < 1|| intHour > 12) {
			return "Hour must be between 1 and 12 for standard time.";
		}
	}
	if (ampm=="am" && intHour==12) {
		intHour=0;
	}
	if (ampm=="pm" && intHour < 12) {
		intHour += 12;
	}
	if (intMin < 0 || intMin > 59) {
		return "Minute must be between 0 and 59.";
	}
	if (intSec < 0 || intSec > 59) {
		return "Second must be between 0 and 59.";
	}
	return new Date(intYear,intMonth-1,intDay,intHour,intMin,intSec);
}
function dateCheck(dateStr,formatStr) {
	var myObj = buildDate(dateStr,formatStr);
	if (typeof myObj == "object") {
		return true;
	}else {
		return false;
   }
}
	function openWindow(Page,wName,W,H,AdditionalParam)
	{
		left1=(screen.width/2)-(W/2);
		top1=(screen.height/2)-(H/2);
		Features="width=" + W + ",height=" + H + ",scrollbars=1,status=1,left=" + left1 + ",top=" + top1;
		if (AdditionalParam!="") 	Features=Features + "," + AdditionalParam;

		window.open(Page,wName,Features);
		
	}

//		dateCheck(email.value,"%m/%d/%yyyy")==false
