﻿var delim = String.fromCharCode(4);
theBrowser = navigator.userAgent.toString().toUpperCase();
var isIE = theBrowser.indexOf("MSIE") >= 0 && theBrowser.indexOf("OPERA") < 0 ? true : false;
function LaunchDemo(url, w, h, fl) {
    launchDemo = true;
    if (!isIE && !fl) {
        launchDemo = window.confirm("For best viewing, we recommend that you use Microsoft Internet Explorer. Do you still want to continue viewing the demo?");
    }
    if (launchDemo) {
        pstr = "WIDTH=" + w + ",HEIGHT=" + h + ",SCROLLBARS=1";
        window.open(url, 'DEMO', pstr);
    }
    return false;
}
    
function GenericWindowOpener(url, w, h)
{
    pstr = "WIDTH=" + w + ",HEIGHT=" + h + ",SCROLLBARS=1";
    window.open(url, "", pstr);
}

function CheckRegExp(stringToCheck, regExp)
{
    re = new RegExp(regExp);
    return re.test(stringToCheck);
}
function trim ( s ) 
  {
    var theString = s;
    var NewString = theString.replace(/^\s+/, "");
    var NewestString = NewString.replace(/\s+$/, "");
    return NewestString;
  } 
function isValidEmail(value)
{
	re = new RegExp("^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)+$");
	return re.test(value);
}
  
function ValidateAlphabetsNumbersDotsDashesUnderscoresBrackets(value)
{
    re = new RegExp("[^\\.A-Za-z0-9_\\-\\(\\)\\n\\r\\f\\t]");
    return ! re.test(value);
}
function isValidDate(value)
{
	value = trim(value);
	re = /(0[1-9]|1[012])[-/.](0[1-9]|[12][0-9]|3[01])[-/.]([0-9][0-9]\d\d)/
	formatOK = re.test(value);
	if (! formatOK) { return false;}
	re2 = /[-/.]/g; // replace all 
	var dateVal = value.replace(re2, "/");
	dateMonthYear = dateVal.split("/");
	if (dateMonthYear.length != 3) { return false; }
	var mon = parseInt(dateMonthYear[0], 10);
	var date = parseInt(dateMonthYear[1], 10);
	var yr = parseInt(dateMonthYear[2], 10);
	if (mon > 12 || date > 31)
	{
		return false;
	}
	if ( (mon == 4 || mon == 6 || mon == 9 || mon == 11) && date > 30)
	{
		return false;
	}
	else if ((mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12) && date > 31)
	{
		return false;
	}
	else if (mon == 2)
	{
		if (date > 29) { return false;}
		var isLeapYear = false;
		if (yr % 4 != 0)
		{
			isLeapYear = false;
		}
		else if (yr % 400 == 0)
		{
			isLeapYear = true;
		}
		else if (yr % 100 == 0)
		{
			isLeapYear = false;
		}
		else
		{
			isLeapYear = true;
		}
		if (! isLeapYear && date > 28) { return false;}
	}
	return true;
}  
function isInteger(s, zero_allowed, negative_allowed )
  {
  	var inputNum = s;
  	inputNum = trim(inputNum);
  	if (inputNum == "") { return false; }
	num_len = inputNum.length;
	if (num_len == 0 || isNaN(num_len) )
	   {
	   		return false;
	   }
	var start_pos = 0   
	if (negative_allowed) 
		{ 
			if (inputNum.charAt(0) == '-') start_pos = 1;
		}   
	for (i=start_pos; i<num_len; i++)
	   {
	   		num_at_pos = inputNum.charAt(i);
			if ( ! ( (num_at_pos >= '0') && (num_at_pos <= '9') ) )
			  {
			  	return false;
			  }	  
	   }   
	evaluated_number = Number(inputNum);
	if (! zero_allowed && evaluated_number == 0)
	   {
	   		return false;
	   }
	return true;   
  }

//compares two dates and returns the following values:
//0  --> Date 1 = Date 2
//1  --> Date 1 > Date 2
//-1 --> Date 1 < Date 2  
function CompareDates(date1, date2)
{
	date1ToInt = ConvertDateToInt(date1);
	date2ToInt = ConvertDateToInt(date2);
	if (date1ToInt == date2ToInt) { return 0;}
	if (date1ToInt > date2ToInt) { return 1;}
	if (date1ToInt < date2ToInt) { return -1;}
}

function ConvertDateToInt(aDate)
{
	monthNames = new Array();
	monthNames[0] = "JAN";
	monthNames[1] = "FEB";
	monthNames[2] = "MAR";
	monthNames[3] = "APR";
	monthNames[4] = "MAY";
	monthNames[5] = "JUN";
	monthNames[6] = "JUL";
	monthNames[7] = "AUG";
	monthNames[8] = "SEP";
	monthNames[9] = "OCT";
	monthNames[10] = "NOV";
	monthNames[11] = "DEC";
	dateArray = aDate.split("/");
	if (dateArray.length != 3) { return 0;}
	aDay = parseInt(dateArray[1],10); //Get DD part
	aMon = parseInt(dateArray[0],10);//Get MM part
	aYr = parseInt(dateArray[2],10);// Get YYYY part
	aDate = monthNames[aMon-1] + " " + aDay + ", " + aYr;
	aDate = Date.parse(aDate.toString());//Get seconds
	aDateInt = parseInt(aDate,10);//Convert to integer
	return aDateInt;//return that integer
}
function Phone(countryCode, areaCode, number, extension, displayNumber, ableToParse)
{
    this.countryCode = countryCode;
    this.areaCode = areaCode;
    this.number = number;
    this.extension = extension;
    this.displayNumber = displayNumber;
    this.ableToParse = ableToParse;
}
function PhoneParser(phoneNumber)
{
    countryCode = "";
    areaCode = "";
    number = "";
    extension = "";
    phoneNumber = trim(phoneNumber);
	number = phoneNumber;
	parsedSuccessfully = false;
    if (phoneNumber.length > 0)
    {
        startIndex = 0;
        /* First find the country code */
        /* Assuming country code is always listed as +XXX Then Phone Number */
        phoneNumberLeft2 = phoneNumber.substr(0, 2);
        if (phoneNumberLeft2.indexOf("+") >= 0)
        {
            indexOfPlusSign = phoneNumber.indexOf("+");
            phoneNumberLength = phoneNumber.length;
            countryCode = "";
            indexOfPhoneNumberWithoutCountryCode = 0;
            for (var i=indexOfPlusSign+1; i<phoneNumberLength; i++)
            {
              charAtPosition   = phoneNumber.charAt(i);
                if (charAtPosition >= '0' && charAtPosition <= '9')
                {
                    countryCode += charAtPosition;
                }
                else
                {
                   indexOfPhoneNumberWithoutCountryCode = i;
                   break; 
                }
            }
            phoneNumber = trim(phoneNumber.substr(indexOfPhoneNumberWithoutCountryCode));
        }
        
        //Now check if the phone number is in XXX-XXX-XXXX format not.
		phoneFormatArray = new Array();
		formatFound = false;
		if (countryCode == "1")
		{
			phoneFormatArray[phoneFormatArray.length] = new RegExp(/^\D*(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$/);//123-456-7890 x 1234 
			phoneFormatArray[phoneFormatArray.length] = new RegExp(/^\D*(\d{3})\)?\D?([\d\D]{7})\D*(\d*)$/);//123-ABCDEFG x 1234
			phoneFormatArray[phoneFormatArray.length] = new RegExp(/^\D*(\d{3})\)?\D?([\d\D]*)\D*(\d*)$/);//123-ABCDEFGHJKLMNOP
		}
		phoneFormatArray[phoneFormatArray.length] = new RegExp(/^\D*(\d*)\)?\D?([\d\D]*)\D*(\d*)$/);//123-ABCDEFGHJKLMNOP
		for (var i=0; i<phoneFormatArray.length; i++)
		{
			phoneSplitArray = phoneNumber.match(phoneFormatArray[i]);
			if (phoneSplitArray != null)
			{
				parsedSuccessfully = true;
				break;
			}
		}
		areaCode = "";
		extension = "";
		if (parsedSuccessfully && phoneSplitArray.length > 1)
		{
			if (phoneSplitArray.length >= 5)
			{
				areaCode = trim(phoneSplitArray[1]);
				number = trim(phoneSplitArray[2]) + trim(phoneSplitArray[3]);
				extension = trim(phoneSplitArray[4]);
			}
			else if (phoneSplitArray.length >= 4)
			{
				areaCode = trim(phoneSplitArray[1]);
				number = trim(phoneSplitArray[2]) + trim(phoneSplitArray[3]);
			}
			else if (phoneSplitArray.length >= 3)
			{
			    areaCode = trim(phoneSplitArray[1]);
				number = trim(phoneSplitArray[2]);
			}
			else if (phoneSplitArray.length >= 2)
			{
				number = trim(phoneSplitArray[1]);
			}
		}
		else
		{
			areaCode = "";
			extension = "";
			number = phoneNumber;
		}
    }
	countryCode = trim(countryCode);
	areaCode = trim(areaCode);
	extension = trim(extension);
	number = trim(number);
	displayNum = "";
	if (countryCode != "")
	{
	    displayNum += "+" + countryCode + " ";
	}
	if (areaCode != "")
	{
	    displayNum += "(" + areaCode + ") ";
	}
	if (number != "")
	{
	    displayNum += number + " ";
	}		
	if (extension != "")
	{
	    displayNum += " x " + extension;
	}		
	displayNum = trim(displayNum);
	return new Phone(countryCode, areaCode, number, extension, displayNum, parsedSuccessfully);
}
