//Detects browser type 
function makeObject() { // Check a browser type for create a object for use a AJAX Technology
    var x; 
    var browser = navigator.appName; 
    if(browser == "Microsoft Internet Explorer"){
        x = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else{
        x = new XMLHttpRequest();
    }
    return x;
}

function isValidUserName(str) { // Alpabets, Numbers, Special Chars [._] only accepted
	if (/^(([a-zA-Z])+([._])*([0-9])*)+$/.test(str)) {
		return true;
	}
	return false;
}

function isValidEmail(emailStr) {
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(emailStr)) { // Email Validation
		return (true)
	}
	return (false)
}

function isValidAlphaNumeric(str) { // Alpabets, Numbers only accepted
	if (/^(([a-z])*([A-Z])*([0-9])*)+$/.test(str)) {
		return true;
	}
	return false;
}

function isValidAlphabet(str) { // Alpabets only accepted, Space not accepted
	if (/^(([a-z])*([A-Z])*)+$/.test(str)) {
		return true;
	}
	return false;
}
function replaceCurrency(str) {
	ret_str = str;
	ret_str = ret_str.replace(/ ZpD /g,"£");
	ret_str = ret_str.replace(/ ZpR /g,"€");
	return ret_str;
}

function isValidString(str) {	// Alpabets with Space only accepted
	if (/^(([a-z])*([A-Z] )*)+$/.test(str)) {
		return true;
	}
	return false;
}

function isValidNumeric(str) { // Numbers only accepted
	if (/^(([0-9])*)+$/.test(str)) {
		return true;
	}
	return false;
}

function isValidTelephone(str) {	// Numbers, Special Chars ([-#()+ ]), Space not accepted, String not accepted
	if (/^(([0-9])*([-#()+ ])*)+$/.test(str)) {
		return true;
	}
	return false;
}

function isValidTelephoneWithString(str) { // Numbers,Alpabets, Special Chars ([-#()+ ]), Space accepted
	if (/^(([a-z])*([A-Z])*([0-9])*([-#()+ ])*)+$/.test(str)) {
		return true;
	}
	return false;
}

function isValidZipcode(str) { // Alpabets, Numbers only accepted
	if (/^(([a-z])*([A-Z])*([0-9])*)+$/.test(str)) {
		return true;
	}
	return false;
}

function isValidURL(urlStr){
	if (urlStr.indexOf(" ")!=-1){
		return false;	
	}
	if(urlStr==""||urlStr==null){
		return false;
	}
	urlStr=urlStr.toLowerCase();
	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var atom=validChars + '+';
	var urlPat=/^http:\/\/(\w*)\.([\-\+a-z0-9]*)\.(\w*)/;
	var matchArray=urlStr.match(urlPat);
	if (matchArray==null){
		return false;
	}
	var user=matchArray[2];
	var domain=matchArray[3];
	for (i=0; i<user.length; i++) {
		if (user.charCodeAt(i)>127) {
			return false;
		}
	}
	for (i=0; i<domain.length; i++) {
		if (domain.charCodeAt(i)>127) {
			return false;
		}
	}
	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	for (i=0;i<len;i++) {
		if (domArr[i].search(atomPat)==-1) {
			return false;
		}
	}
	if (domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(atomPat)==-1) {
		return false;
	}
  return true;
}

function isValidFile(str,type) {
	// type = image,text,video
	
	if(!type || !str) {
		alert("Missing argument!, The Arguments are (File Control Value,File Type)");
		return false;                            
	}
	
	var x;
	var flag = false;
	var file_type;
	
	var lc_fileext = str.toLowerCase();
	var file_array = lc_fileext.split('.');
	var array_len = file_array.length;
	var file_ext = file_array[array_len-1];
	//alert(file_ext);
	if(type == 'image') {
		file_type = 'bmp,jpg,jpeg,png,gif';
	}
	if(type == 'text') {
		file_type = 'txt,doc,pdf,rtf';
	}
	if(type == 'video') {
		file_type = 'mpeg,mpg,asf,dat,avi,wmv,dat';
	}
	
	var file_split = file_type.split(',');
	var file_array_len = file_split.length;
	
	for(x=0; x<file_array_len; x++)
	{
		if(file_ext == file_split[x])
		{
			flag = true;
			return true;
		}
	}
	if(!flag) {
		return false;
	}
}

function isValidNumber(num) { // Call this Function at a key press Event
	var num_val= document.getElementById(num).value;
	if(isNaN(num_val)) {
		var num_len = num_val.length;
		var num_value = num_val.substring(0, num_len-1);
		document.getElementById(num).value = num_value;
		if(isNaN(num_value)) {
			document.getElementById(num).value = "";
		}
		alert("Numbers Only Accepted");
	}
}

function charRemaining(tField, nField, maxAllowed) {
	if (tField.value.length > maxAllowed) {
		tField.value = tField.value.substring(0, maxAllowed);
	}
	nField.value = maxAllowed - tField.value.length;
}

function autoTab(input,len, e) {
    var isNN = (navigator.appName.indexOf("Netscape")!=-1);
    var keyCode = (isNN) ? e.which : e.keyCode;
    var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
    if(input.value.length >= len && !containsElement(filter,keyCode)) {
        input.value = input.value.slice(0, len);
        input.form[(getIndex(input)+1) % input.form.length].focus();
    }
}

function containsElement(arr, ele) {
    var found = false, index = 0;
    while(!found && index < arr.length)
        if(arr[index] == ele)
            found = true;
        else
            index++;
    return found;
}

function getIndex(input) {
    var index = -1, i = 0, found = false;
    while (i < input.form.length && index == -1)
        if (input.form[i] == input)
            index = i;
        else
            i++;
    return index;
}


function stripHTML(str) {
	ret_str = str.replace(/&/g," ZsW ");
	ret_str = ret_str.replace(/\n/g," ZbR ");
	ret_str = ret_str.replace(/</g," ZlT ");
	ret_str = ret_str.replace(/\+/g," ZpL ");
	ret_str = ret_str.replace(/\?/g," ZqS ");
	ret_str = ret_str.replace(/>/g," ZgT ");
	return ret_str;
}

function trim(sString) {
	while (sString.substring(0,1) == ' ') {
		sString = sString.substring(1, sString.length);
	}
	while (sString.substring(sString.length-1, sString.length) == ' ') {
	    sString = sString.substring(0,sString.length-1);
	}
	return sString;
}

function rightTrim( strValue ) {
	var objRegExp = /^([\w\W]*)(\b\s*)$/;
	if(objRegExp.test(strValue)) {
		//remove trailing a whitespace characters
		strValue = strValue.replace(objRegExp, '$1');
	}
	return strValue;
}

function leftTrim( strValue ) {
	var objRegExp = /^(\s*)(\b[\w\W]*)$/;
	
	if(objRegExp.test(strValue)) {
		//remove leading a whitespace characters
		strValue = strValue.replace(objRegExp, '$2');
	}
	return strValue;
}

function roundNumber(num, dec) {
	if(!dec) {
		dec = 0;
	}
 	var num1 = new Number (parseFloat (num));
 	var return_num = num1.toFixed (dec);
 	return return_num;
}

/*
function roundNumbers(num, dec) { // Alternate Function
	if(!dec) {
		dec = 0;
	}
	var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
	return result;
}
*/

function convertDMYtoMDY(datestr) {
	splt_dat = datestr.split("/");
	rtn_date = splt_dat[1]+"-"+splt_dat[0]+"-"+splt_dat[2];
	return rtn_date;
}

function convertDMYtoMDYWithSlash(datestr){
	splt_dat = datestr.split("/");
	rtn_date = splt_dat[1]+"/"+splt_dat[0]+"/"+splt_dat[2];
	return rtn_date;
}

function calcDays(date1,date2){
	// date format m/d/yyyy
  /*var date1 = document.getElementById('d1').lastChild.data;
  var date2 = document.getElementById('d2').lastChild.data;
  date1 = date1.split("-");
  date2 = date2.split("-");*/
  //var sDate = new Date(date1[0]+"/"+date1[1]+"/"+date1[2]);
  //var eDate = new Date(date2[0]+"/"+date2[1]+"/"+date2[2]);
  //alert(date1);
  var sDate = new Date(date1);
  var eDate = new Date(date2);
  var daysApart = Math.abs(Math.round((sDate-eDate)/86400000));
  return daysApart;
}

function getNumberofDay(myVar,return_type){
	var user_date = Date.parse(myVar);
	var today_date = new Date();
	var diff_date =  user_date - today_date;
	var num_years = diff_date/31536000000;
	var num_months = (diff_date % 31536000000)/2628000000;
	var num_days = ((diff_date % 31536000000) % 2628000000)/86400000;
	if(return_type=="Years" || return_type=="years"|| return_type=="y"|| return_type=="Y"){
		return num_years;
	}
	if(return_type=="Months" || return_type=="months"|| return_type=="m"|| return_type=="M"){
		return num_months;
	}
	if(return_type=="Days" || return_type=="days"|| return_type=="d"|| return_type=="D"){
		return num_days;
	}

}
function getNewDateFormat(input_date,cur,new_format,sep,rep,err_msg,show_time,time_format) {
      var year = "";
      var month = "";
      var date = "";
      var res = "";
      
	  cur = cur.toUpperCase();
      new_format = new_format.toUpperCase();
      if(time_format) {
	      time_format = time_format.toUpperCase();
	  }
      
      var split_date_and_time = input_date.split(' ');
      input_date = split_date_and_time[0];
      var input_time = split_date_and_time[1];
      date_arr = input_date.split(sep);
      
      var cur_len = cur.length;

      for(i=0; i<cur_len; i++) {
            if(cur.charAt(i) == 'Y') {
                  year = date_arr[i];
            }
            if(cur.charAt(i) == 'M') {
                  month = date_arr[i];
            }
            if(cur.charAt(i) == 'D') {
                  date = date_arr[i];
            }                        
      }

      new_len = new_format.length;

      var ret_date = "";
      
      for(i=0; i<new_len; i++) {
            if(new_format.charAt(i) == 'Y') {
                  res = year;
            }
            if(new_format.charAt(i) == 'M') {
                  res = month;
            }
            if(new_format.charAt(i) == 'D') {
                  res = date;
            }
            if(i != new_len-1) {
                  ret_date += res+rep;
            } else {
                  ret_date += res;
            }
      }
      
      if(show_time=='YES' && input_time) {
            var split_time = input_time.split(":");
            if(time_format == '12') {
                  if(split_time[0]<12) {
                        //ret_date += " split_time[0] : split_time[1] AM";
                  } else {
                        var hours = split_time[0]-12;
                        //ret_date += " hours : split_time[1] PM";
                  }
            } else {
                 // ret_date += " split_time[0] : split_time[1]";      
            }
      }
            
      return ret_date;
}
function splitArray(datestr,sep) {
	splt_dat = datestr.split(sep);
	return splt_dat;
}
function getDateDiff(d,m,y) {
	m = m-1;
	var startingdate=new Date(y, m, d); //Month is 0-11 in JavaScript
	var today = new Date();
	var one_day = 1000*60*60*24;

	var res = Math.ceil( (today.getTime()-startingdate.getTime() ) / (one_day) );
	return res;
}



function compareStartTwoDates(startdate,enddate,cur_date,msg) {
	var startdateStr = startdate;
	var enddateStr = enddate;	
	var start_val = FindDateGreaterThanToday(startdateStr);
	//if(startdateStr){
		if(!start_val){		
			alert("Booking date must be greater than today");
			return false;
	
		}
	//}
	else if(startdateStr && enddateStr){		
		var t1=startdate;
	    var t2=enddate;
	    var one_day=1000*60*60*24;		
	    var x=t1.split("/");     
	    var y=t2.split("/");
	    var date1=new Date(x[2],(x[1]-1),x[0]);
	    var date2=new Date(y[2],(y[1]-1),y[0]);
	    var month1=x[1]-1;
	    var month2=y[1]-1;
	    Diff=Math.ceil((date2.getTime()-date1.getTime())/(one_day)); 	   
	   
	    if(Diff < 0) {
			alert(msg);
			return false;
		}else{
			return true;
		} 
	}
	return true;

}
function compareEndTwoDates(startdate,enddate,cur_date,msg) {
	var startdateStr = startdate;
	var enddateStr = enddate;
	if(!startdateStr) {
		alert("Enter Booking start date");
		return false;
	}
	if(!enddateStr) {
		alert("Enter Booking end date");
		return false;
	}	
	else {
		var t1=startdate;
	    var t2=enddate;
	    var one_day=1000*60*60*24;		
	    var x=t1.split("/");     
	    var y=t2.split("/");
	    var date1=new Date(x[2],(x[1]-1),x[0]);
	    var date2=new Date(y[2],(y[1]-1),y[0]);
	    var month1=x[1]-1;
	    var month2=y[1]-1;
	    Diff=Math.ceil((date2.getTime()-date1.getTime())/(one_day)); 	   
	    if(Diff < 0) {
			alert(msg);
			return false;
		}else{
			return true;
		} 
	}
}


function compareGraterThanTodayDates(startdate,enddate,cur_date) {
	var startdateStr = startdate;
	var enddateStr = enddate;

	if(!startdateStr && enddateStr){
		alert("Enter Arrival date");
		return false;
	}
	else {
		from_date = convertDMYtoMDY(startdateStr);
		to_date = convertDMYtoMDY(enddateStr);
		if (Date.parse(from_date) > Date.parse(to_date)) {
			alert("The Departure date must not greater than the Arrival date ");
			return false;
		}
		else{
			startdateStr = startdate;
			enddateStr = enddate;
			
			if(!enddateStr || !startdateStr){
				alert("Enter start date or end date");
				return false;
			}
			else {
				from_date = convertDMYtoMDY(startdateStr);
				to_date = convertDMYtoMDY(enddateStr);	
				
				if (Date.parse(from_date) > Date.parse(to_date)) {
					alert("Invalid Date Range")
					return false;
				}	else {
					return true;
				}	
			}
		}
	}
}
function FindDateGreaterThanToday(booking_date) {
	var new_arrival_date = booking_date;
	date = new Date();
	var day = date.getDate();
	var month = date.getMonth()+1;
	var year = date.getFullYear();
	var new_departure_date =day+"/"+month+"/"+year;
	if(new_arrival_date) {
	
		var start_arr = splitArray(new_arrival_date,"/");
		var strat_day = getDateDiff(start_arr[0],start_arr[1],start_arr[2]); // d m y	
		
		var end_arr = splitArray(new_departure_date,"/");
		var end_day = getDateDiff(end_arr[0],end_arr[1],end_arr[2]); // d m y	
		date_diff = Math.abs(end_day - strat_day);
		
		if(strat_day > 1) {
			return false;
		} 
		return true;
	} else {
		return false;
	}
}

function daysBetween(date1, date2) {
    var t1=date1;
    var t2=date2;
    var one_day=1000*60*60*24;
	
    var x=t1.split("/");     
    var y=t2.split("/");
    var date1=new Date(x[2],(x[1]-1),x[0]);
    var date2=new Date(y[2],(y[1]-1),y[0]);
    var month1=x[1]-1;
    var month2=y[1]-1;
    Diff=Math.ceil((date2.getTime()-date1.getTime())/(one_day)); 
    if(Diff < 1) {
		return false;
	}else{
		return true;
	} 

}




function clearForm(form_name, allId, oldClass, newClass, inner_html_id) {
	
	form_length = document.forms.length;

	for(loop = 0; loop < form_length; loop++) {
		
		var new_form = document.forms[loop].name;

		if(new_form == form_name) {
			control_length = document.forms[loop].length

			for (var i = 0; i < control_length; i++) {
				var elem = document.forms[loop][i];
				var control_type = elem.type;
				
				if(control_type == "text" || control_type == "password" || control_type == "select-one" || control_type == "textarea") {
					elem.value = "";
				}
				
				if(control_type == "file") {
					elem.value = "";
					elem.outerHTML = elem.outerHTML;
				}

				if(control_type == "checkbox" || control_type == "radio") {
					elem.checked = false;
				}
			}
		}
	}
	
	if(allId || oldClass || newClass) {
		changeClass(allId, oldClass, newClass);	
	}
	
	if(inner_html_id) {
		clearInnerHTML(inner_html_id);
	}	
	
}

function changeClass(allId, oldClass, newClass) { // allId -> all id's seperate with comma
	var arr = allId.split(",");
	var len = arr.length;
	
	for (i = 0; i < len; i++) {
		elementID = trim(arr[i]);
		if(document.getElementById(elementID)) {
			var tempObj = document.getElementById(elementID);
			tempObj.className = tempObj.className.replace(new RegExp(oldClass),newClass);
		}
	}
}

function clearInnerHTML(allId) { // allId -> all id's seperate with comma
	var arr = allId.split(",");
	var len = arr.length;
	
	for (i = 0; i < len; i++) {
		elementID = trim(arr[i]);
		if(document.getElementById(elementID)) {
			document.getElementById(elementID).innerHTML = "";
		}
	}
}

function openPopup(url,w,h) {
	var newwindow=window.open(url,'name','height='+h+',width='+w+',scrollbars=yes,resizable=yes');
	if (window.focus) {newwindow.focus()}
	return false;
}
function getDayDiff(d,m,y) {
	m = m-1;
	var startingdate=new Date(y, m, d); //Month is 0-11 in JavaScript
	var today = new Date();
	var one_day = 1000*60*60*24;
	var res = Math.ceil( (today.getTime()-startingdate.getTime() ) / (one_day) );
	return res;
}
function compareTime(time1,time2){
	
	var start_time = time1.split(" ");
	var end_time = time2.split(" ");
	
	if(start_time[1]=="AM"){
		if(start_time[1]==end_time[1]){
			start_time = start_time[0].split(":");
			end_time = end_time[0].split(":");
			
			var start_time_hour = eval(start_time[0]);
			var start_time_minute = eval(start_time[1]);
			var end_time_hour = eval(end_time[0]);
			var end_time_minute = eval(end_time[1]);
			
			if((start_time_hour<=end_time_hour) && start_time_hour<=12 && end_time_hour<=12){
				if(start_time_minute<=59 && end_time_minute<=59){
					return true;
				}
			}else{
				alert("Invalid time");
				return false;
			}
	
		}else if((start_time[1]=="AM" && end_time[1]=="PM") || (start_time[1]=="PM" && end_time[1]=="AM")){
			start_time = start_time[0].split(":");
			end_time = end_time[0].split(":");
			
			var start_time_hour = eval(start_time[0]);
			var start_time_minute = eval(start_time[1]);
			var end_time_hour = eval(end_time[0]);
			var end_time_minute = eval(end_time[1]);
			
			if(start_time_hour<=12 && end_time_hour<=12){
				if(start_time_minute<=59 && end_time_minute<=59){
					return true;
				}
			}else{
				alert("Invalid time");
				return false;
			}
	
		}
	
	}else if(start_time[1]=="PM"){
		if(start_time[1]==end_time[1]){
			start_time = start_time[0].split(":");
			end_time = end_time[0].split(":");
			
			var start_time_hour = eval(start_time[0]);
			var start_time_minute = eval(start_time[1]);
			var end_time_hour = eval(end_time[0]);
			var end_time_minute = eval(end_time[1]);
			
			if((start_time_hour<=end_time_hour) && start_time_hour<=12 && end_time_hour<=12){
				if(start_time_minute<=59 && end_time_minute<=59){
					return true;
				}
			}else{
				alert("Invalid time");
				return false;
			}
	
		}else if((start_time[1]=="AM" && end_time[1]=="PM") || (start_time[1]=="PM" && end_time[1]=="AM")){
			start_time = start_time[0].split(":");
			end_time = end_time[0].split(":");
			
			var start_time_hour = eval(start_time[0]);
			var start_time_minute = eval(start_time[1]);
			var end_time_hour = eval(end_time[0]);
			var end_time_minute = eval(end_time[1]);
			
			if(start_time_hour<=12 && end_time_hour<=12){
				if(start_time_minute<=59 && end_time_minute<=59){
					return true;
				}
			}else{
				alert("Invalid time");
				return false;
			}
	
		}
	
	}
	
}
function compareStartTwoDates(startdate,enddate,cur_date,msg) {
	var startdateStr = startdate;
	var enddateStr = enddate;	
	var start_val = FindDateGreaterThanToday(startdateStr);
	if(startdateStr && enddateStr){		
		var t1=startdate;
	    var t2=enddate;
	    var one_day=1000*60*60*24;		
	    var x=t1.split("/");     
	    var y=t2.split("/");
	    var date1=new Date(x[2],(x[1]-1),x[0]);
	    var date2=new Date(y[2],(y[1]-1),y[0]);
	    var month1=x[1]-1;
	    var month2=y[1]-1;
	    Diff=Math.ceil((date2.getTime()-date1.getTime())/(one_day)); 	   
	   
	    if(Diff < 0) {
			alert(msg);
			return false;
		}else{
			return true;
		} 
	}
	return true;

}
function compareEndTwoDates(startdate,enddate,cur_date,msg) {
	var startdateStr = startdate;
	var enddateStr = enddate;
	if(startdateStr && enddateStr){		
		var t1=startdate;
	    var t2=enddate;
	    var one_day=1000*60*60*24;		
	    var x=t1.split("/");     
	    var y=t2.split("/");
	    var date1=new Date(x[2],(x[1]-1),x[0]);
	    var date2=new Date(y[2],(y[1]-1),y[0]);
	    var month1=x[1]-1;
	    var month2=y[1]-1;
	    Diff=Math.ceil((date2.getTime()-date1.getTime())/(one_day)); 	   
	    if(Diff < 0) {
			alert(msg);
			return false;
		}else{
			return true;
		} 
	}
}
