// disable backspace
function customKeyMapping ()
{
	// disable backspace
	if (typeof window.event == 'undefined')
	{
		document.onkeypress = function(e)
		{
			var test_var=e.target.nodeName.toUpperCase();
			if (e.target.type) var test_type=e.target.type.toUpperCase();
			if ((test_var == 'INPUT' && (test_type == 'TEXT' || test_type == 'PASSWORD')) || test_var == 'TEXTAREA')
			{
				// must check to see if the field is readonly if so eat the keypress
				// otherwise the browser will still default to going back one page
				if ((e.target.readOnly == true) || (e.target.disabled == true))
				{
					e.preventDefault();
				}
				return e.keyCode;
			}
			else if (e.keyCode == 8)
			{
				e.preventDefault();
			}
		}
	}
	else
	{
		document.onkeydown = function()
		{
			var test_var=event.srcElement.tagName.toUpperCase();
			if (event.srcElement.type) var test_type=event.srcElement.type.toUpperCase();
			if ((test_var == 'INPUT' && (test_type == 'TEXT' || test_type == 'PASSWORD')) || test_var == 'TEXTAREA')
			{
				// must check to see if the field is readonly if so eat the keypress
				// otherwise the browser will still default to going back one page
				if ((event.srcElement.readOnly == true) || (event.srcElement.disabled == true))
				{
					event.returnValue=false;
				}
				return event.keyCode;
			}
			else if (event.keyCode == 8)
			{
				event.returnValue=false;
			}
		}
	}
	// disable backspace
}

// Generic divlayer javascript
function showDropDownDiv(obj, code, id)
{
	div = document.getElementById(id);
	if (code == obj.value)
	{
		div.style.display = 'inline';
	}
	else
	{
		div.style.display = 'none';
	}
}

function displayMoney(field)
{
	var tmp = field.value.replace(",", "");
	field.value = formatMoney(roundMoney(tmp));

}

function createWindow(winURL, winName, winFeatures, w, h)
{
	winFeatures += ',width=' + w;
	winFeatures += ',height=' + h;
	if ( window.screenX )
		winFeatures += ',screenX=' + (window.screenX + (window.outerWidth - w) / 2);
	else
		winFeatures += ',left=' + (window.screenLeft + (document.documentElement.offsetWidth - w) / 2);
	if ( window.screenY )
		winFeatures += ',screenY=' + (window.screenY + (window.outerHeight - h) / 2);
	else
		winFeatures += ',top=' + (window.screenTop + (document.documentElement.offsetHeight - h) / 2);
	var win = window.open(winURL, winName, winFeatures);
}

function popupImageViewer(imageId, imageName, imageDesc, image, imageKey, imagePath)
{
	urlStr = "imageViewer.php?imageId="+imageId+"&imageName="+imageName+"&imageDesc="+imageDesc+"&image="+image+"&imageKey="+imageKey+"&imagePath="+imagePath;
	openWin = window.open(urlStr, "imageViewer", "status=yes,menubar=no,toolbar=no,location=no,scrollbars=yes,resizable=yes,width=450,height=350,modal=yes");
}                                                  

function textCounter(field, countfield, maxlimit)
{
	if (field.value.length > maxlimit)
	{
		field.value = field.value.substring(0, maxlimit);
	}
	else
	{
		countfield.value = maxlimit - field.value.length;
	}
}

function displayMessage(message)
{
	alert(message);
}

function confirmAction(question)
{
	var agree = confirm(question);

	if (agree)
	{
		return true ;
	}
	else
	{
		return false ;
	}
}

//
// Field access
//

function hasValue(id)
{
	return document.getElementById(id);
}

function getValue(id)
{
	return document.getElementById(id).value;
}

function hasInnerText(id)
{
	return document.getElementById(id);
}

function getInnerText(id)
{
	return document.getElementById(id).innerHTML;
}

function setValue(id, value)
{
	document.getElementById(id).value = value;
}

function setInnerText(id, value)
{
	document.getElementById(id).innerHTML = value;
}

//
// Money
//

function addMoney(total, plus)
{
	if (isNaN(total)) return total;
	if (isNaN(plus)) return total;

	return roundMoney(total + plus);
}

function roundMoney(money)
{
	var p = parseFloat(money);
	if (isNaN(p)) return money;

	return Math.round(p*100)/100;
}

function formatMoney(money)
{
	if (isNaN(money)) return money;
	if (money.length == 0) return money;
	money = "" + money;
	if (money.indexOf('.') < 0) return money + ".00";
	if (money.indexOf('.') == money.length - 2) return money + "0";
	return money;
}

function setMoneyValue(id, value)
{
	setValue(id, formatMoney(value));
}

function setMoneyInnerText(id, value)
{
	setInnerText(id, formatMoney(value));
}

//
// Dates
//

function getDateField( field, format )
{
	var date = getDateFromFormat( field.value, 'M/d/yy' );
	if ( ! date )
	{
		date = getDateFromFormat( field.value, 'M/d/yyyy' );
	}
	if ( ! date )
	{
		date = getDateFromFormat( field.value + '/' + new Date().getFullYear(), 'M/d/yyyy' );
	}

	if ( date )
	{
		date = new Date( date );
		field.value = formatDate( date, format );
	}
	else
	{
		date = new Date( field.value );
	}

	return date;
}

//
// Validator
//

var hasOnSubmit = false;

function Validator(frmname)
{
  this.formobj=document.forms[frmname];
	if(!this.formobj)
	{
	  alert("BUG: couldnot get Form object "+frmname);
		return;
	}
	if(this.formobj.onsubmit)
	{
	 this.formobj.old_onsubmit = this.formobj.onsubmit;
	 this.formobj.onsubmit=null;
     hasOnSubmit = true;
	}
	else
	{
	 this.formobj.old_onsubmit = null;
	}
	this.formobj.onsubmit=form_submit_handler;
	this.addValidation = add_validation;
	this.setAddnlValidationFunction=set_addnl_vfunction;
	this.clearAllValidations = clear_all_validations;
}
function set_addnl_vfunction(functionname)
{
  this.formobj.addnlvalidation = functionname;
}
function clear_all_validations()
{
	for(var itr=0;itr < this.formobj.elements.length;itr++)
	{
		this.formobj.elements[itr].validationset = null;
	}
}
function form_submit_handler()
{
    //alert("form_submit_handler");
    //alert(hasOnSubmit);
	for(var itr=0;itr < this.elements.length;itr++)
	{
		if(this.elements[itr].validationset &&
	   !this.elements[itr].validationset.validate())
		{
		  return false;
		}
	}
	if(this.addnlvalidation)
	{
	  str =" var ret = "+this.addnlvalidation+"()";
	  eval(str);
    if(!ret) return ret;
	}

    if (hasOnSubmit) {
        return onSubmit();
    }
    else {
       	return true;
    }

}
function add_validation(itemname,descriptor,errstr)
{
  if(!this.formobj)
	{
	  alert("BUG: the form object is not set properly");
		return;
	}//if
	var itemobj = this.formobj[itemname];
  if(!itemobj)
	{
	  alert("BUG: Couldnot get the input object named: "+itemname);
		return;
	}
	if(!itemobj.validationset)
	{
	  itemobj.validationset = new ValidationSet(itemobj);
	}
  itemobj.validationset.add(descriptor,errstr);
}
function ValidationDesc(inputitem,desc,error)
{
  this.desc=desc;
	this.error=error;
	this.itemobj = inputitem;
	this.validate=vdesc_validate;
}
function vdesc_validate()
{
 if(!V2validateData(this.desc,this.itemobj,this.error))
 {
    this.itemobj.focus();
		return false;
 }
 return true;
}
function ValidationSet(inputitem)
{
    this.vSet=new Array();
	this.add= add_validationdesc;
	this.validate= vset_validate;
	this.itemobj = inputitem;
}
function add_validationdesc(desc,error)
{
  this.vSet[this.vSet.length]=
	  new ValidationDesc(this.itemobj,desc,error);
}
function vset_validate()
{
   for(var itr=0;itr<this.vSet.length;itr++)
	 {
	   if(!this.vSet[itr].validate())
		 {
		   return false;
		 }
	 }
	 return true;
}
function validateEmailv2(email)
{
// a very simple email validation checking.
// you can add more complex email checking if it helps
    if(email.length <= 0)
	{
	  return true;
	}
    var splitted = email.match("^(.+)@(.+)$");
    if(splitted == null) return false;
    if(splitted[1] != null )
    {
      var regexp_user=/^\"?[\w-_\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
    }
    if(splitted[2] != null)
    {
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null)
      {
	    var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
	    if(splitted[2].match(regexp_ip) == null) return false;
      }// if
      return true;
    }
return false;
}
function V2validateData(strValidateStr,objValue,strError)
{
    var epos = strValidateStr.search("=");
    var  command  = "";
    var  cmdvalue = "";
    if(epos >= 0)
    {
     command  = strValidateStr.substring(0,epos);
     cmdvalue = strValidateStr.substr(epos+1);
    }
    else
    {
     command = strValidateStr;
    }
    switch(command)
    {
        case "req":
        case "required":
         {
           if(eval(objValue.value.length) == 0)
           {
              if(!strError || strError.length ==0)
              {
                strError = objValue.name + " : Required Field";
              }//if
              alert(strError);
              return false;
           }//if
           break;
         }//case required
        case "maxlength":
        case "maxlen":
          {
             if(eval(objValue.value.length) >  eval(cmdvalue))
             {
               if(!strError || strError.length ==0)
               {
                 strError = objValue.name + " : "+cmdvalue+" characters maximum ";
               }//if
               alert(strError + "\n[Current length = " + objValue.value.length + " ]");
               return false;
             }//if
             break;
          }//case maxlen
        case "minlength":
        case "minlen":
           {
             if(eval(objValue.value.length) <  eval(cmdvalue))
             {
               if(!strError || strError.length ==0)
               {
                 strError = objValue.name + " : " + cmdvalue + " characters minimum  ";
               }//if
               alert(strError + "\n[Current length = " + objValue.value.length + " ]");
               return false;
             }//if
             break;
            }//case minlen
        case "alnum":
        case "alphanumeric":
           {
              var charpos = objValue.value.search("[^A-Za-z0-9]");
              if(objValue.value.length > 0 &&  charpos >= 0)
              {
               if(!strError || strError.length ==0)
                {
                  strError = objValue.name+": Only alpha-numeric characters allowed ";
                }//if
                alert(strError + "\n [Error character position " + eval(charpos+1)+"]");
                return false;
              }//if
              break;
           }//case alphanumeric
        case "num":
        case "numeric":
           {
              var charpos = objValue.value.search("[^0-9]");
              if(objValue.value.length > 0 &&  charpos >= 0)
              {
                if(!strError || strError.length ==0)
                {
                  strError = objValue.name+": Only digits allowed ";
                }//if
                alert(strError + "\n [Error character position " + eval(charpos+1)+"]");
                return false;
              }//if
              break;
           }//numeric
        case "alphabetic":
        case "alpha":
           {
              var charpos = objValue.value.search("[^A-Za-z]");
              if(objValue.value.length > 0 &&  charpos >= 0)
              {
                  if(!strError || strError.length ==0)
                {
                  strError = objValue.name+": Only alphabetic characters allowed ";
                }//if
                alert(strError + "\n [Error character position " + eval(charpos+1)+"]");
                return false;
              }//if
              break;
           }//alpha
		case "alnumhyphen":
			{
              var charpos = objValue.value.search("[^A-Za-z0-9\-_.]");
              if(objValue.value.length > 0 &&  charpos >= 0)
              {
                  if(!strError || strError.length ==0)
                {
                  strError = objValue.name+": characters allowed are A-Z,a-z,0-9,- and _";
                }//if
                alert(strError + "\n [Error character position " + eval(charpos+1)+"]");
                return false;
              }//if
			break;
			}
        case "email":
          {
               if(!validateEmailv2(objValue.value))
               {
                 if(!strError || strError.length ==0)
                 {
                    strError = objValue.name+": Enter a valid Email address ";
                 }//if
                 alert(strError);
                 return false;
               }//if
           break;
          }//case email
        case "lt":
        case "lessthan":
         {
            if(isNaN(objValue.value))
            {
              alert(objValue.name+": Should be a number ");
              return false;
            }//if
            if(eval(objValue.value) >=  eval(cmdvalue))
            {
              if(!strError || strError.length ==0)
              {
                strError = objValue.name + " : value should be less than "+ cmdvalue;
              }//if
              alert(strError);
              return false;
             }//if
            break;
         }//case lessthan
        case "gt":
        case "greaterthan":
         {
            if(isNaN(objValue.value))
            {
              alert(objValue.name+": Should be a number ");
              return false;
            }//if
             if(eval(objValue.value) <=  eval(cmdvalue))
             {
               if(!strError || strError.length ==0)
               {
                 strError = objValue.name + " : value should be greater than "+ cmdvalue;
               }//if
               alert(strError);
               return false;
             }//if
            break;
         }//case greaterthan
        case "regexp":
         {
		 	if(objValue.value.length > 0)
			{
	            if(!objValue.value.match(cmdvalue))
	            {
	              if(!strError || strError.length ==0)
	              {
	                strError = objValue.name+": Invalid characters found ";
	              }//if
	              alert(strError);
	              return false;
	            }//if
			}
           break;
         }//case regexp
        case "dontselect":
         {
            if(objValue.selectedIndex == null)
            {
              alert("BUG: dontselect command for non-select Item");
              return false;
            }
            if(objValue.selectedIndex == eval(cmdvalue))
            {
             if(!strError || strError.length ==0)
              {
              strError = objValue.name+": Please Select one option ";
              }//if
              alert(strError);
              return false;
             }
             break;
         }//case dontselect
         case "selectBoxEmpty":
         {
            if(objValue.selectedIndex == null)
            {
              alert("BUG: dontselect command for non-select Item");
              return false;
            }
            if(objValue.length == 0)
            {
             if(!strError || strError.length ==0)
              {
              strError = objValue.name+": Please Select one option ";
              }//if
              alert(strError);
              return false;
             }
             break;
         }//case dontselect
    }//switch
    return true;
}
/*
	Copyright 2003 JavaScript-coder.com. All rights reserved.
*/

function lookupChargeItem( chargeItem )
{
	var search = '';
	if ( chargeItem )
	{
		search += chargeItem;
	}
	var url = _systemBaseURL + '?dirs=frontdesk&page=lookupChargeItems&session=reset&view=ch_item_lookup&viewcmd=search&field=2&value=' + escape( search );
	openPopupWindow( url, 720, 350 );
}

function lookupTravelAgency( iata )
{
	var search = '';
	if ( iata )
	{
		search += iata;
	}
	var url = _systemBaseURL + '?dirs=people&page=lookupTravelAgency&session=reset&view=agency_lookup&viewcmd=search&field=2&value=' + escape( search );
	openPopupWindow( url, 600, 350 );
}


function lookupGroupBlock( code )
{
	var search = '';
	if ( code )
	{
		search += code;
	}
	var url = _systemBaseURL + '?dirs=reservations&page=lookupGroupBlock&session=reset&viewcmd=search&field=2&value=' + escape( search );
	openPopupWindow( url, 600, 350 );
}


function lookupOrganization( name, callback )
{
	var search = '';
	if ( name )
	{
		search += name;
	}
    if ( callback )
    {
        callbackstr = "&callback=" + callback;
    }
    else
    {
        callbackstr = "";
    }
	var url = _systemBaseURL + '?dirs=people&page=lookupOrganization&session=reset&view=org_lookup&viewcmd=search&field=1&value=' + escape( search ) + callbackstr;
	
	openPopupWindow( url, 600, 350 );
}

function quickRezLookupPerson( lastName, firstName, lead_source, contact_type, organization, address1, address2, city, state, postal_code, country, phone_number, mobile_phone_number, fax_phone_number, email, website,  direct_mail, email_market, relationshipID, isRequired, mainRelationshipID, callback, departmentID, addDefaultRels, organizationID )
{
	var search = '';
	var extraNameSearch = '';
	
	if ( lastName )
	{
		search += lastName;
		extraNameSearch += '&rezdb_last_name='+escape(lastName);
	}

	if ( lastName && firstName )
	{
		search += '%, ';
	}
	
	if ( firstName )
	{
		search += firstName;	
		extraNameSearch += '&rezdb_first_name='+escape(firstName);
	}

	if ( callback )
    {
        callbackstr = "&callback=" + callback;
    }
    else
    {
        callbackstr = "";
    }

	var url = _systemBaseURL + '?dirs=people&page=lookupName&session=reset&view=people_lookup&viewcmd=search&field=1&value=' + escape( search ) + callbackstr + extraNameSearch;

	if ( relationshipID )
	{
		url +=  '&relationshipID=' + relationshipID;
	}
	if ( isRequired )
	{
		url +=  '&isRequired=' + isRequired;
	}
	if ( mainRelationshipID )
	{
		url +=  '&mainRelationshipID=' + mainRelationshipID;
	}
    if ( departmentID )
	{
		url +=  '&departmentID=' + departmentID;
	}
	if ( addDefaultRels )
    {
    	url += '&defaultrel=' + addDefaultRels;
    }  
    if (organizationID)
    {
    	url += '&organizationID=' + organizationID;	
    }
    
	if ( website )
	{
		url += '&quickRezwebsite=' + escape( website );
	}
	if ( email )
	{
		url += '&quickRezemail=' + escape( email );
	}
	if ( fax_phone_number )
	{
		url += '&quickRezfax_phone_number=' + escape( fax_phone_number );
	}
	if ( mobile_phone_number )
	{
		url += '&quickRezmobile_phone_number=' + escape( mobile_phone_number );
	}
	if ( phone_number )
	{
		url += '&quickRezphone_number=' + escape( phone_number );
	}
	if ( country )
	{
		url += '&quickRezcountry=' + escape( country );
	}
	if ( postal_code )
	{
		url += '&quickRezpostal_code=' + escape( postal_code );
	}
	if ( state )
	{
		url += '&quickRezstate=' + escape( state );
	}
	if ( city )
	{
		url += '&quickRezcity=' + escape( city );
	}
	if ( address2 )
	{
		url += '&quickRezaddress2=' + escape( address2 );
	}
	if ( organization )
	{
		url += '&quickRezorganization=' + escape( organization );
	}
	if ( address1 )
	{
		url += '&quickRezaddress1=' + escape( address1 );
	}
	if ( contact_type )
	{
		url += '&quickRezcontact_type=' + escape( contact_type );
	}
	if ( lead_source )
	{
		url += '&quickRezlead_source=' + escape( lead_source );
	}
	if ( direct_mail )
	{
		url += '&quickRezdirect_mail=' + escape( direct_mail );
	}
	if ( email_market )
	{
		url += '&quickRezemail_market=' + escape( email_market );
	}
	
	openPopupWindow( url, 800, 500 );
}

function lookupPerson( lastName, firstName, relationshipID, isRequired, mainRelationshipID, callback, departmentID, addDefaultRels, organizationID )
{
	var search = '';
	var extraNameSearch = '';
	
	if ( lastName )
	{
		search += lastName;
		extraNameSearch += '&rezdb_last_name='+escape(lastName);
	}

	if ( lastName && firstName )
	{
		search += '%, ';
	}
	if ( firstName )
	{
		search += firstName;
		
		extraNameSearch += '&rezdb_first_name='+escape(firstName);
	}

	if ( callback )
    {
        callbackstr = "&callback=" + callback;
    }
    else
    {
        callbackstr = "";
    }

	var url = _systemBaseURL + '?dirs=people&page=lookupName&session=reset&view=people_lookup&viewcmd=search&field=1&value=' + escape( search ) + callbackstr + extraNameSearch;
	
	if ( relationshipID )
	{
		url +=  '&relationshipID=' + relationshipID;
	}
	if ( isRequired )
	{
		url +=  '&isRequired=' + isRequired;
	}
	if ( mainRelationshipID )
	{
		url +=  '&mainRelationshipID=' + mainRelationshipID;
	}
    if ( departmentID )
	{
		url +=  '&departmentID=' + departmentID;
	}
	if ( addDefaultRels )
    {
    	url += '&defaultrel=' + addDefaultRels;
    }
    if (organizationID)
    {
    	url += '&organizationID=' + organizationID;	
    }

	openPopupWindow( url, 800, 500 );
}

function lookupEmployee(callback, departmentID)
{
	if ( callback )
    {
        callbackstr = "&callback=" + callback;
    }
    else
    {
        callbackstr = "";
    }
    var url = _setupBaseURL + '?dirs=property&slim=y&page=lookupEmployee' + callbackstr;
    if ( departmentID )
	{
		url +=  '&departmentID=' + departmentID;
	}
	openPopupWindow( url, 800, 500 );
}

function lookupSystemEmployee(callback, departmentID)
{
	if ( callback )
    {
        callbackstr = "&callback=" + callback;
    }
    else
    {
        callbackstr = "";
    }
    var url = _systemBaseURL + '?dirs=people&page=lookupEmployee' + callbackstr;
    if ( departmentID )
	{
		url +=  '&departmentID=' + departmentID;
	}
	openPopupWindow( url, 800, 500 );
}

function lookupGiftCertificate( nbr )
{
	var search = '';
	if ( nbr )
	{
		search += nbr;
	}
	var url = _systemBaseURL + '?dirs=frontdesk&page=lookupGiftCertificate&session=reset&view=gc_lookup&viewcmd=search&field=1&value=' + escape( search );
	openPopupWindow( url, 1000, 500 );
}

function lookupFeeType( nbr )
{
	var search = '';
	if ( nbr )
	{
		search += nbr;
	}
	var url = _setupBaseURL + '?dirs=accounting&page=lookupFeeTypes&session=reset&view=gc_lookup&viewcmd=search&field=1&value=' + escape( search );
	openPopupWindow( url, 600, 350 );
}

function lookupARAccount( number, showAll )
{
	var search = '';
	if ( number )
	{
		search += number;
	}
	
	var url = _systemBaseURL + '?dirs=accounting&page=lookupARAccount&session=reset&viewcmd=search&field=1&show_all='+showAll + '&value=' + escape( search ) ;
	
	openPopupWindow( url, 600, 350 );
}

function authorizeOverride( context )
{
	var url = _systemBaseURL + '?dirs=common&page=override&id=' + context;
	openPopupWindow( url, 400, 150 );
}

function authorizeOverride2( context, splitID )
{
	var url = _systemBaseURL + '?dirs=common&page=override2&id=' + context + '&split_id=' + splitID;
	openPopupWindow( url, 400, 150 );
}

function openPopupWindow( url, width, height )
{
	openPopupFocus( url, '_blank', width, height, 'width=' + width + ',height=' + height + ',resizable=yes,toolbar=no,status=no,scrollbars=yes,menubar=no,directories=no,location=no,dependant=yes', true, true );
}

function openPopupWindowAdv( url, width, height, x, y)
{
	window.open(url,'popup',
'left='+x+',top='+y+',width='+width+',height='+height+',resizable=yes,toolbar=no,status=no,scrollbars=yes,menubar=no,directories=no,location=no,dependant=yes');
}

function openPopupWindowCursor( event, url, width, height)
{
	// BUG:: IE HATES EVENTS FIX THIS
	try {
		x = event.clientX;
		y = event.clientY;
		openPopupWindowAdv( url, width, height, x, y);
	} catch (e) {}
}

function onPrintViewPdf(run, where)
{
	var url = where + '?dirs=common&page=showViewPDF&run=' + run;
	openPopupWindow(url, 700, 800);
}

function onPrintViewCSV(run, where)
{
	var url = where + '?dirs=common&page=showViewCSV&run=' + run;
	openPopupWindow(url, 700, 800);
}

function onPrintViewHTML(run, where)
{
	var url = where + '?dirs=common&page=showViewHTML&run=' + run;
	openPopupWindow(url, 700, 800);
}
