
function IsDate(dateStr) {
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
	var matchArray = dateStr.match(datePat); // is the format ok?
	
	if (matchArray == null) {
		return false;
	}
	
	day = matchArray[1];
	month = matchArray[3];
	year = matchArray[5];
	
	if (month < 1 || month > 12) { // check month range
		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) { // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day > 29 || (day==29 && !isleap)) {
			return false;
		}
	}
	return true;
}

function IsTime(strVal) {
	var hours, minutes;
	if (strVal.length != 5 || strVal.substring(2,3)!=":")	{ return false;	}
	//saat kysmy
	hours=strVal.substring(0,2);
	if (isNaN(hours)==true) 	{ return false;	}
	if (hours.substring(0,1)=='.' || hours.substring(1,2)=='.')	{ return false;	}
	if ((parseInt(hours) >= 0 && parseInt(hours) < 24)==false) 	{ return false;}
	//dakika kysmy
	minutes=strVal.substring(3,5);
	if (isNaN(minutes)==true) 	{ return false;}
	if (minutes.substring(0,1)=='.' || minutes.substring(1,2)=='.')	{ return false;	}
	if ((parseInt(minutes) >= 0 && parseInt(minutes) < 60)==false) 	{ return false;}
	return true;
}

function IsNumeric(sText){   
   var ValidChars = "0123456789.";
   var Char;
   if(sText=='') return false;
   for (i = 0; i < sText.length; i++)
      {
      Char = sText.charAt(i);
      if (ValidChars.indexOf(Char) == -1)
         {
         return false;
         }
      }
   return true;
}

function DateDiff(argDate1,argDate2){
  var date1 = argDate1.split("/");
  var date2 = argDate2.split("/");
  var sDate = new Date(date1[1]+"/"+date1[0]+"/"+date1[2]);
  var eDate = new Date(date2[1]+"/"+date2[0]+"/"+date2[2]);
  var daysApart = Math.abs(Math.round((sDate-eDate)/86400000));
  return daysApart;
}
function xValidateCard(CardType, CardNo, intExpiryYYYYMM) {
	var intCardNoNew = 1;
	var intLastCharPos = CardNo.length;
	var intCardTest = 0;
	var strCardTest = "";
	var strMsg = "";
	//Initial CARD check
	if (CardType==1)	{//Visa ,Delta
		if (CardNo.length == 13 || CardNo.length == 16) {
			if (CardNo.charAt(0) == 4)  
				intCardNoNew = CardNo
		}	
	} else if (CardType==2)	{//Master
		if (CardNo.substring(0,2) > 50 && CardNo.substring(0,2) < 56) 
			intCardNoNew = CardNo	
	}
	
	//Test 1
	for (i=2; i < intCardNoNew.length + 1; i++,i++) {	
		strMsg = strMsg + parseInt(intCardNoNew.charAt(intLastCharPos - i)) * 2
	}
	
	//Test 2
	for (i=1; i < intCardNoNew.length + 1; i++,i++) {	
		strMsg = strMsg + intCardNoNew.charAt(intLastCharPos - i)
	}

	//Test 3
	intLastCharPos = strMsg.length;
	
	for (i=1; i < strMsg.length + 1; i++) {	
		intCardTest = intCardTest + parseInt(strMsg.charAt(intLastCharPos - i));				
	}
	
	//Examine Result
	strCardTest = intCardTest.toString();

	if (intCardTest == 0)
		intCardNoNew = "Invalid"
	else if (strCardTest.charAt(strCardTest.length - 1) == "0") 
		intCardNoNew = "Valid"
	else
		intCardNoNew = "Invalid"			
	
	//Perform Date Check
	var dteSystem = new Date();
	var intNowYYYYMM = 0;
	var strFrom = "";
	var strExpiry = "";
		
	if (((dteSystem.getMonth() + 1).toString()).length == 1) 
		intNowYYYYMM = dteSystem.getFullYear() + "0" + (dteSystem.getMonth() + 1)
	else
		intNowYYYYMM = dteSystem.getFullYear() + "" + (dteSystem.getMonth() + 1)
			
	if (intNowYYYYMM > intExpiryYYYYMM)
		strExpiry = "Invalid"
			
	//Display Error Message
	var strErrMsg = "";
	
	if (intCardNoNew == "Invalid" || strFrom == "Invalid" || strExpiry == "Invalid") {

		strErrMsg = "Unable to validate: \n\n";
		
		if (intCardNoNew == "Invalid")
			strErrMsg = strErrMsg + "\"Card Number\"\n";
		if (strExpiry == "Invalid")
			strErrMsg = strErrMsg + "\"Expiry Date\"\n";
		if (strFrom == "Invalid")
			strErrMsg = strErrMsg + "\"Valid From Date\"\n";
		
		strErrMsg = strErrMsg + "\n Please re-input valid details";
		//alert(strErrMsg);
		return false;
	} else {
		return true;
	}
}		


function dateAdd(p_Interval, p_Number, p_Date){
	//if(!IsDate(p_Date)){return "invalid date: '" + p_Date + "'";}
	if(isNaN(p_Number)){return "invalid number: '" + p_Number + "'";}	

	p_Number = new Number(p_Number);
	var dt = new Date(p_Date);
	switch(p_Interval.toLowerCase()){
		case "yyyy": {// year
			dt.setFullYear(dt.getFullYear() + p_Number);
			break;
		}
		case "q": {		// quarter
			dt.setMonth(dt.getMonth() + (p_Number*3));
			break;
		}
		case "m": {		// month
			dt.setMonth(dt.getMonth() + p_Number);
			break;
		}
		case "y":		// day of year
		case "d":		// day
		case "w": {		// weekday
			dt.setDate(dt.getDate() + p_Number);
			break;
		}
		case "ww": {	// week of year
			dt.setDate(dt.getDate() + (p_Number*7));
			break;
		}
		case "h": {		// hour
			dt.setHours(dt.getHours() + p_Number);
			break;
		}
		case "n": {		// minute
			dt.setMinutes(dt.getMinutes() + p_Number);
			break;
		}
		case "s": {		// second
			dt.setSeconds(dt.getSeconds() + p_Number);
			break;
		}
		case "ms": {		// second
			dt.setMilliseconds(dt.getMilliseconds() + p_Number);
			break;
		}
		default: {
			return "invalid interval: '" + p_Interval + "'";
		}
	}
	return dt;
}

function datePart(p_Interval, p_Date){
	//if(!IsDate(p_Date)){return "invalid date: '" + p_Date + "'";}

	var dtPart = new Date(p_Date);
	switch(p_Interval.toLowerCase()){
		case "yyyy": return dtPart.getFullYear();
		case "q": return parseInt(dtPart.getMonth()/3)+1;
		case "m": return dtPart.getMonth()+1;
		case "y": return dateDiff("y", "1/1/" + dtPart.getFullYear(), dtPart);			// day of year
		case "d": return dtPart.getDate();
		case "w": return dtPart.getDay();	// weekday
		case "ww":return dateDiff("ww", "1/1/" + dtPart.getFullYear(), dtPart);		// week of year
		case "h": return dtPart.getHours();
		case "n": return dtPart.getMinutes();
		case "s": return dtPart.getSeconds();
		case "ms":return dtPart.getMilliseconds();	// millisecond	// <-- extension for JS, NOT available in VBScript
		default: return "invalid interval: '" + p_Interval + "'";
	}
}

function weekdayName(p_Date, p_abbreviate){
	//if(!IsDate(p_Date)){return "invalid date: '" + p_Date + "'";}
	var dt = new Date(p_Date);
	var retVal = dt.toString().split(' ')[0];
	var retVal = Array('Pazar','Pazartesi','Sali','Carsamba','Persembe','Cuma','Cumartesi')[dt.getDay()];
	if(p_abbreviate==true){retVal = retVal.substring(0, 3)}	// abbr to 1st 3 chars
	return retVal;
}
// REQUIRES: isDate()
function monthName(p_Date, p_abbreviate){
	//if(!IsDate(p_Date)){return "invalid date: '" + p_Date + "'";}
	var dt = new Date(p_Date);	
	var retVal = Array('Ocak','Subat','Mart','Nisan','Mayis','Haziran','Temmuz','Agustos','Eylul','Ekim','Kasim','Aralik')[dt.getMonth()];
	if(p_abbreviate==true){retVal = retVal.substring(0, 3)}	// abbr to 1st 3 chars
	return retVal;
}

//calendar user control'unun shared scripts
var extracallscript='';
function CalendarObj_Click(objCal,objHRef,callscr){
    objHRef.title=objHRef.parentElement.children(0).value;
    extracallscript=callscr;
	objCal.setReturnFunction("CalendarObj_RetFunc");
	objCal.select(objHRef.id,'dd/MM/yyyy');
}

function CalendarObj_RetFunc(objHRef,y,m,d){
    var xDay=new String(d);
	var xMon=new String(m);
	if (xDay<10){
        xDay='0' + xDay;
    }
    if (xMon<10){
        xMon='0' + xMon;
    }		    
    MM_findObj(objHRef).parentElement.children(0).value=xDay + '/' + xMon + '/' + y
	if(extracallscript!='') {	    
	    eval(extracallscript);
	}
    
}

function CalendarObj_Value(objId)    {
    return MM_findObj(objId+'_txtDate').parentElement.children(0).value;
}

function CalendarObj_ValueSet(objId,value)    {        
	var xDay = datePart('d',value);
	var xMon = datePart('m',value);	
	if (xDay<10){
        xDay='0' + xDay;
    }
    if (xMon<10){
        xMon='0' + xMon;
    }		    
    MM_findObj(objId+'_txtDate').parentElement.children(0).value=xDay + '/'+ xMon + '/'+ datePart('yyyy',value)
}

function CalendarObj_DateValue(objId)    {
    var dtStr=MM_findObj(objId+'_txtDate').parentElement.children(0).value;
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
	var matchArray = dtStr.match(datePat); // is the format ok?	
	day = matchArray[1];
	month = matchArray[3];
	year = matchArray[5];
	
    return new Date(month + '/'+ day + '/'+ year) ;
}