//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 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:\/\/(\www)\.([\-\+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 isValidFloat(num) { // Call this Function at a key press Event
	var num_val= document.getElementById(num).value;
	num_val = num_val.split(".");
	len = num_val.length;
	if(len<=2 && num_val[0]){
		if(isNaN(num_val[0])) {
			document.getElementById(num).value = "";
			alert("Numbers Only Accepted");
		}
		if(num_val[1]){
			if(isNaN(num_val[1])) {
				document.getElementById(num).value = "";
				alert("Numbers Only Accepted");
			}
			
		}
	}else{
		document.getElementById(num).value = "";
		alert("Numbers Only Accepted");
	}
}
function blurFloat(num) { // Call this Function at a key press Event
	var num_val= document.getElementById(num).value;
	val = num_val;
	num_val = num_val.split(".");
	len = num_val.length;
	
	if(num_val[0]){
		if(!num_val[1]){
			document.getElementById(num).value = num_val[0]+".00";
		}else if(num_val[1].length==1){
			document.getElementById(num).value = num_val[0]+"."+num_val[1]+"0";
		}else if(num_val[1].length>2){
			val = parseFloat(val);
			val = val.toFixed(2);	
			document.getElementById(num).value = val;
		}
	}
}

function charRemaining(tField, nField, maxAllowed) {
	if (tField.value.length > maxAllowed) {
		tField.value = tField.value.substring(0, maxAllowed);
	}
	nField.value = maxAllowed - tField.value.length;
}

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 ");
	ret_str = ret_str.replace(/£/g," ZpD ");
	ret_str = ret_str.replace(/€/g," ZpR ");
	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 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 compareTwoDates(startdate,enddate,cur_date,msg) {
	var startdateStr = startdate;
	var enddateStr = enddate;

	if(!startdateStr) {
		alert("Enter From date");
		return false;
	}
	if(!enddateStr) {
		alert("Enter To date");
		return false;
	}	
	else {
		from_date = getNewDateFormat(startdateStr,'DMY','MDY','/','-');
		to_date = getNewDateFormat(enddateStr,'DMY','MDY','/','-');
		if (Date.parse(from_date) > Date.parse(to_date)) {
			if(msg) {
				alert(msg);
			} else {
				alert("The From date must not greater than the To date ");
			}
			return false;
		}
		if(cur_date) {
			startdateStr = enddate;
			enddateStr = cur_date;
			
			from_date = getNewDateFormat(startdateStr,'DMY','MDY','/','-');
			to_date = getNewDateFormat(enddateStr,'DMY','MDY','/','-');
				
			if (Date.parse(from_date) > Date.parse(to_date)) {
				alert("Invalid Date Range")
				return false;
			}	else {
				return true;
			}
		}
		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 clearForm(form_name,allId,inner_html_id,clear_ind_value) {
	
	form_length = document.forms.length;

	for(loop = 0; loop < form_length; loop++) {
		
		//var new_form = document.forms[loop].name;

		if(document.forms[loop] == 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) {
		changeClass(allId);	
	}
	
	if(inner_html_id) {
		clearInnerHTML(inner_html_id);
	}	
	
	if(clear_ind_value) {
		clearIndividualValue(clear_ind_value);
	}
}

function changeClass(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)) {
			cur_className = document.getElementById(elementID).className;
			var temp = cur_className.split(" ");
			var tempObj = document.getElementById(elementID);
			tempObj.className = tempObj.className.replace(new RegExp(cur_className),temp[0]);
		}
	}
}

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 clearIndividualValue(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)['value'] = "";
		}
	}
}

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 checkValidation(norId,funId,valFun,passID,cpassID){
	var chkflag = true;
	
	/* Normal Val Start */
	if(norId){
		var norid = norId.split("`");
		var noridlen = norid.length;
		for (i = 0; i < noridlen; i++) {
			elementID = trim(norid[i]);
			var elementVal = document.getElementById(elementID).value;
			if(!elementVal) {
				current_className = document.getElementById(elementID).className;
				document.getElementById(elementID).className = current_className+' err';
				chkflag = false;
			}
		}
	}
	/* Normal Val End */
	
	/*Val with Fun Start*/
	if(funId){
		var funid = funId.split("`");
		var valfun = valFun.split("`");
		var funidlen = funid.length;
		var valfunlen = valfun.length;
		if(funidlen==valfunlen){
			for (i = 0; i < funidlen; i++) {
				elementID = trim(funid[i]);
				valFUN = trim(valfun[i]);
				var elementVal = document.getElementById(elementID).value;
				switch(valFUN){
					case 'vemail':
						if(!isValidEmail(elementVal)) {
							current_className = document.getElementById(elementID).className;
							document.getElementById(elementID).className = current_className+' err';
							chkflag = false;
						}
					break;
					case 'vusername':
						if(!isValidUserName(elementVal)) {
							current_className = document.getElementById(elementID).className;
							document.getElementById(elementID).className = current_className+' err';
							chkflag = false;
						}
					break;
					case 'vtelephone':
						if(!isValidTelephone(elementVal)) {
							current_className = document.getElementById(elementID).className;
							document.getElementById(elementID).className = current_className+' err';
							chkflag = false;
						}
					break;
					case 'vtelephoneWithString':
						if(!isValidTelephoneWithString(elementVal)) {
							current_className = document.getElementById(elementID).className;
							document.getElementById(elementID).className = current_className+' err';
							chkflag = false;
						}
					break;
					case 'vzipcode':
						if(!isValidZipcode(elementVal)) {
							current_className = document.getElementById(elementID).className;
							document.getElementById(elementID).className = current_className+' err';
							chkflag = false;
						}
					break;
					case 'vurl':
						var elementVal = "http://"+elementVal;
						if(!isValidURL(elementVal)) {
							current_className = document.getElementById(elementID).className;
							document.getElementById(elementID).className = current_className+' err';
							chkflag = false;
						}
					break;
					case 'vnumber':
						if(!isValidNumric(elementID)) {
							current_className = document.getElementById(elementID).className;
							document.getElementById(elementID).className = current_className+' err';
							chkflag = false;
						}
					break;					
					case 'vflt':
						if(!isValidFloat(elementID)) {
							current_className = document.getElementById(elementID).className;
							document.getElementById(elementID).className = current_className+' err';
							chkflag = false;
						}
					break;					
					case 'vfck':
						var oEditor = FCKeditorAPI.GetInstance(elementID);

						// Get the Editor Area DOM (Document object).
						var oDOM = oEditor.EditorDocument;
					
						var iLength;
					
						// The are two diffent ways to get the text (without HTML markups).
						// It is browser specific.
						
						// If Internet Explorer.
						if (document.all) {
							fck_value = oDOM.body.innerText.length ;
						} else { // If Gecko.
								var r = oDOM.createRange() ;
								r.selectNodeContents( oDOM.body ) ;
								fck_value = r.toString().length ;
						}
						if(!fck_value){
							current_className = document.getElementById(elementID).className;
							document.getElementById(elementID).className = current_className+' err';
							chkflag = false;	
						}
					break;
					
					
				}
				
			}
		}else{
			chkflag = false;
			alert("Length of funId & valFun Mismatch");
		}
	}
	/*Val With Fun End */
	
	/*Password Validation Start */
	if(passID && cpassID){
		passID = trim(passID);
		cpassID = trim(cpassID);
		var valpass = document.getElementById(passID).value;
		var valcpass = document.getElementById(cpassID).value;
		if (valpass.length >0 ) {
			if(valpass.length <6 ) {
				current_className = document.getElementById(passID).className;
				document.getElementById(passID).className = current_className+' err';
				chkflag = false;
			}
			if(valcpass!=valpass) {
				current_className = document.getElementById(cpassID).className;
				document.getElementById(cpassID).className = current_className+' err';
				chkflag = false;
			}
		}else{
			passID_className = document.getElementById(passID).className;
			cpassID_className = document.getElementById(cpassID).className;
			document.getElementById(passID).className = passID_className+' err';
			document.getElementById(cpassID).className = cpassID_className+' err';
			chkflag = false;
		}
		
	}else if(passID){
		var valpass = document.getElementById(passID).value;
		if(valpass.length <6 ) {
			current_className = document.getElementById(passID).className;
			document.getElementById(passID).className = current_className+' err';
			flag=false;
			chkflag = false;
		}	
	}
	/*Password Validation End */
	return chkflag;
	
}
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 PopupCenter(pageURL,title,w,h,height_auto) {	
	
	var left = (screen.width/2)-(w/2);
	var top = (screen.height/2)-(h/2);
	if(height_auto){
		h = "auto";
	}
	var targetWin = window.open(pageURL,title,'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=no, copyhistory=no, width='+w+', height='+h+', top='+top+', left='+left);
} 

function getData(valID,delimiter){
	var valID = valID.split("`");
	var valIDlen = valID.length;
	var val = "";
	if(!delimiter){	
		delimiter = "`";
	}
	for(i=0;i<valIDlen;i++){
		if(valID[i]){
			val += document.getElementById(valID[i]).value;	
			if(i<valIDlen-1){
				val +=delimiter;
			}
		}
	}
	val = stripHTML(val);
	return val;
}

function limitLength(Object, MaxLen,evt) {
	if(document.all) {
		if(event.keyCode==8 || event.keyCode==0) {			
			return true;	
		}
	} else {	
		if(evt.which==8 || evt.which==0) {
			return true;
		} 
	}
	return (Object.value.length <= MaxLen);	
 	
}
