var ActivityLog = (function() {
        var activitylog = {};
        activitylog.ActivityLogID = 0;
        activitylog.UniqueId = "cf193a28-b13a-4a20-bcd6-9e18e6fb466f";
        activitylog.TransactionID = 0;
        activitylog.CorrespondenceTypeID = { ID: 0, Value: "" };
        activitylog.ActivityTypeID = { ID: 1, Value: "" };
        activitylog.ReferenceTypeID = { ID: 0, Value: "" };
        activitylog.ReferenceNumber = "";
        activitylog.Action = null;
        activitylog.InternalSubject = null;
        activitylog.Description = "";
        activitylog.Sender = null;
        activitylog.Recipient = null;
        activitylog.CarbonCopy = null;
        activitylog.ActivityDate = null;
        activitylog.MessageId = null;
        activitylog.MessageUri = null;
        activitylog.IsDraft = true;
        activitylog.IsReply = false;
        activitylog.SentDate = null;
        activitylog.RelatedUniqueId = null;
        activitylog.NoReplyNeeded = false;
        activitylog.DocumentCollection = {};
        activitylog.Attachments = "";
        activitylog.FileName = null;
        activitylog.ContentLength = 0;
        activitylog.Extend = function(){
                extend(this,"ActivityLog");
                extendCollection(this,"DocumentCollection","Document");
                this.IsDirty = false;
                this.IsNew = this.ActivityLogID == 0;
        }
        
        activitylog.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("ActivityLogID",e.ActivityLogID);
                        this.set("TransactionID",e.TransactionID);
                        this.set("CorrespondenceTypeID",e.CorrespondenceTypeID);
                        this.set("ActivityTypeID",e.ActivityTypeID);
                        this.set("ReferenceTypeID",e.ReferenceTypeID);
                        this.set("ReferenceNumber",e.ReferenceNumber);
                        this.set("Action",e.Action);
                        this.set("InternalSubject",e.InternalSubject);
                        this.set("Description",e.Description);
                        this.set("Sender",e.Sender);
                        this.set("Recipient",e.Recipient);
                        this.set("ActivityDate",e.ActivityDate);
                        this.set("MessageId",e.MessageId);
                        this.set("MessageUri",e.MessageUri);
                        this.set("Attachments",e.Attachments);
                        this.set("NoReplyNeeded",e.NoReplyNeeded);
                        this.set("IsDraft",e.IsDraft);
                        this.set("IsReply",e.IsReply);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                        this.DocumentCollection.Update(e.DocumentCollection);
                }
        convertDate(this);
}

activitylog.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return activitylog;
}());
var ActivityLogSearchCriteria = (function() {
        var activitylogsearchcriteria = {};
        activitylogsearchcriteria.TransactionID = 0;
        activitylogsearchcriteria.ActivityLogUniqueId = null;
        activitylogsearchcriteria.ActivityTypeID = { ID: 0, Value: "" };
        activitylogsearchcriteria.ActivityDate = null;
        activitylogsearchcriteria.Recipient = null;
        activitylogsearchcriteria.EmployeeID = 0;
        activitylogsearchcriteria.MaxResults = 0;
        return activitylogsearchcriteria;
}());
var ActivityLogSearchResult = (function() {
        var activitylogsearchresult = {};
        activitylogsearchresult.TransactionID = 0;
        activitylogsearchresult.ActivityTypeID = { ID: 0, Value: "" };
        activitylogsearchresult.ReferenceNumber = null;
        activitylogsearchresult.Action = null;
        activitylogsearchresult.InternalSubject = null;
        activitylogsearchresult.Sender = null;
        activitylogsearchresult.Recipient = null;
        activitylogsearchresult.ActivityDate = null;
        activitylogsearchresult.CreatedDate = null;
        activitylogsearchresult.CreatedBy = null;
        activitylogsearchresult.ActivityLogUniqueId = null;
        return activitylogsearchresult;
}());
var BlockCommission = (function() {
        var blockcommission = {};
        blockcommission.CommissionID = 0;
        blockcommission.PolicyUniqueId = null;
        blockcommission.PaidToFirmUniqueId = null;
        blockcommission.PaidToFranchiseeUniqueId = null;
        blockcommission.Name = null;
        blockcommission.Amount = 0;
        blockcommission.SubtractIPT = false;
        blockcommission.Percentage = 0;
        blockcommission.Rules = null;
        blockcommission.ApplyToReturn = false;
        blockcommission.EffectiveDate =  new Date();
        blockcommission.IneffectiveDate = null;
        blockcommission.Description = "";
        blockcommission.PaidToFirmName = null;
        blockcommission.PaidToFranchiseeName = null;
        blockcommission.PropertyTypes = null;
        blockcommission.UsePremiumRange = false;
        blockcommission.Minimum = null;
        blockcommission.Maximum = null;
        blockcommission.Extend = function(){
                convertDate(this);
                extend(this,"BlockCommission");
                this.IsDirty = false;
                this.IsNew = this.CommissionID == 0;
        }
        
        blockcommission.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("CommissionID",e.CommissionID);
                        this.set("PolicyUniqueId",e.PolicyUniqueId);
                        this.set("PaidToFirmUniqueId",e.PaidToFirmUniqueId);
                        this.set("PaidToFranchiseeUniqueId",e.PaidToFranchiseeUniqueId);
                        this.set("Name",e.Name);
                        this.set("Amount",e.Amount);
                        this.set("SubtractIPT",e.SubtractIPT);
                        this.set("Percentage",e.Percentage);
                        this.set("ApplyToReturn",e.ApplyToReturn);
                        this.set("EffectiveDate",e.EffectiveDate);
                        this.set("IneffectiveDate",e.IneffectiveDate);
                        this.set("Description",e.Description);
                        this.set("PaidToFirmName",e.PaidToFirmName);
                        this.set("PaidToFranchiseeName",e.PaidToFranchiseeName);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                        convertDate(this);
                }
}

blockcommission.IsEqual = function(entity){
        var e = entity;
        return this.CommissionID == e.CommissionID;
}

return blockcommission;
}());
var BlockPremium = (function() {
        var blockpremium = {};
        blockpremium.PremiumID = 0;
        blockpremium.UniqueId = "3f869efe-f16f-4885-b076-86322ed0d2de";
        blockpremium.PolicyUniqueId = null;
        blockpremium.Name = "Default";
        blockpremium.FirmID = null;
        blockpremium.FranchiseeId = null;
        blockpremium.UsePremiumFromBordereau = false;
        blockpremium.PropertyTypeID = { ID: 0, Value: "" };
        blockpremium.DetailCollection = {};
        blockpremium.FirmCollection = {};
        blockpremium.FranchiseeCollection = {};
        blockpremium.Extend = function(){
                extend(this,"BlockPremium");
                extendCollection(this,"FirmCollection","Firm");
                extendCollection(this,"FranchiseeCollection","Firm");
                extendCollection(this,"DetailCollection","BlockPremiumDetail");
                this.IsDirty = false;
                this.IsNew = this.PremiumID == 0;
        }
        
        blockpremium.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("PremiumID",e.PremiumID);
                        this.set("Name",e.Name);
                        this.set("FirmID",e.FirmID);
                        this.set("FranchiseeId",e.FranchiseeId);
                        this.set("UsePremiumFromBordereau",e.UsePremiumFromBordereau);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                        this.DetailCollection.Update(e.DetailCollection);
                }
}

blockpremium.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return blockpremium;
}());
var BlockPremiumDetail = (function() {
        var blockpremiumdetail = {};
        blockpremiumdetail.PremiumDetailID = 0;
        blockpremiumdetail.UniqueId = "539ce3c6-eba2-48f6-a6db-78a427e41ea0";
        blockpremiumdetail.PremiumUniqueId = null;
        blockpremiumdetail.Minimum = null;
        blockpremiumdetail.Maximum = null;
        blockpremiumdetail.Premium = 0;
        blockpremiumdetail.Tax = 0;
        blockpremiumdetail.GrossPremium = 0;
        blockpremiumdetail.TaxID = 0;
        blockpremiumdetail.Extend = function(){
                extend(this,"BlockPremiumDetail");
                this.IsDirty = false;
                this.IsNew = this.PremiumDetailID == 0;
        }
        
        blockpremiumdetail.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("PremiumDetailID",e.PremiumDetailID);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                }
}

blockpremiumdetail.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return blockpremiumdetail;
}());
var BlockReturn = (function() {
        var blockreturn = {};
        blockreturn.ReturnID = 0;
        blockreturn.UniqueId = "6d3935e6-8274-479e-873e-fecbc6b031d2";
        blockreturn.PolicyUniqueId = null;
        blockreturn.Name = null;
        blockreturn.Period =  new Date();
        blockreturn.DateImported = null;
        blockreturn.CountProperties = 0;
        blockreturn.TotalPremium = 0;
        blockreturn.TotalIndemnity = 0;
        blockreturn.TaxRate = null;
        blockreturn.TotalCommission = 0;
        blockreturn.WithholdCommission = false;
        blockreturn.InvoiceUniqueId = null;
        blockreturn.FirmUniqueId = null;
        blockreturn.FranchiseeUniqueId = null;
        blockreturn.InvoiceNumber = null;
        blockreturn.FirmID = 0;
        blockreturn.FranchiseeId = 0;
        blockreturn.PaidToFirmUniqueId = null;
        blockreturn.PaidToFranchiseeUniqueId = null;
        blockreturn.RiskID = 0;
        blockreturn.TransactionID = 0;
        blockreturn.WithCertificate = false;
        blockreturn.Description = null;
        blockreturn.IsExternal = false;
        blockreturn.IsSelected = false;
        blockreturn.ReturnDetailCollection = {};
        blockreturn.Extend = function(){
                convertDate(this);
                extend(this,"BlockReturn");
                extendCollection(this,"ReturnDetailCollection","BlockReturnDetail");
                this.IsDirty = false;
                this.IsNew = this.ReturnID == 0;
        }
        
        blockreturn.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("ReturnID",e.ReturnID);
                        this.set("PolicyUniqueId",e.PolicyUniqueId);
                        this.set("InvoiceUniqueId",e.InvoiceUniqueId);
                        this.set("FirmUniqueId",e.FirmUniqueId);
                        this.set("FranchiseeUniqueId",e.FranchiseeUniqueId);
                        this.set("PaidToFirmUniqueId",e.PaidToFirmUniqueId);
                        this.set("PaidToFranchiseeUniqueId",e.PaidToFranchiseeUniqueId);
                        this.set("RiskID",e.RiskID);
                        this.set("TransactionID",e.TransactionID);
                        this.set("CreatedBy",e.CreatedBy);
                        this.set("TotalIndemnity",e.TotalIndemnity);
                        this.set("CountProperties",e.CountProperties);
                        this.set("TotalPremium",e.TotalPremium);
                        this.set("DateImported",e.DateImported);
                        this.set("CountProperties",e.CountProperties);
                        this.set("ModifiedCount",e.ModifiedCount);
                        this.set("Period",e.Period);
                        this.set("TaxRate",e.TaxRate);
                        this.set("Description",e.Description);
                        this.set("DateImported",e.DateImported);
                        this.set("InvoiceNumber",e.InvoiceNumber);
                        this.set("Name",e.Name);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                }
        convertDate(this);
}

blockreturn.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return blockreturn;
}());
var BlockReturnContext = (function() {
        var blockreturncontext = {};
        blockreturncontext.Block = null;
        blockreturncontext.Blocks = null;
        blockreturncontext.Transaction = null;
        return blockreturncontext;
}());
var BlockReturnDetail = (function() {
        var blockreturndetail = {};
        blockreturndetail.ReturnUniqueId = null;
        blockreturndetail.CountryID = 0;
        blockreturndetail.Address = null;
        blockreturndetail.CommencementDate = null;
        blockreturndetail.Premium = 0;
        blockreturndetail.GrossPremium = 0;
        blockreturndetail.Tax = 0;
        blockreturndetail.Commission = 0;
        blockreturndetail.PropertyTypeID = { ID: 0, Value: "" };
        blockreturndetail.LimitOfIndemnity = 0;
        blockreturndetail.FirmID = 0;
        blockreturndetail.FranchiseeId = 0;
        blockreturndetail.RiskID = 0;
        blockreturndetail.PolicyUniqueId = null;
        blockreturndetail.Idx = 0;
        blockreturndetail.IsOverriden = false;
        blockreturndetail.StrippedAddress = null;
        blockreturndetail.Empty = false;
        blockreturndetail.EnteredPremium = 0;
        blockreturndetail.IsCommencementDateInvalidWarning = false;
        blockreturndetail.IsCommencementDateInvalid = false;
        blockreturndetail.IsCommencementDateAhead = false;
        blockreturndetail.IsCommissionWithheld = false;
        blockreturndetail.DuplicatedProperties = [];
        blockreturndetail.Insured = null;
        blockreturndetail.Contractor = null;
        blockreturndetail.InsuredWorks = null;
        blockreturndetail.ContractPrice = 0;
        blockreturndetail.CompletionDate = null;
        blockreturndetail.InsurancePeriod = 0;
        blockreturndetail.Rate = null;
        blockreturndetail.BlockPeriod =  new Date();
        blockreturndetail.IsExternal = false;
        blockreturndetail.IsCertificate = false;
        blockreturndetail.Extend = function(){
                extend(this,"BlockReturn");
                this.IsDirty = false;
                this.IsNew = this.ReturnUniqueId == null;
        }
        
        blockreturndetail.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("ReturnUniqueID",e.ReturnUniqueId);
                        this.set("CountryID",e.CountryID);
                        this.set("RiskID",e.RiskID);
                        this.set("PolicyUniqueId",e.PolicyUniqueId);
                        this.set("FranchiseeId",e.FranchiseeId);
                        this.set("Address",e.Address);
                        this.set("CommencementDate",e.CommencementDate);
                        this.set("Premium",e.Premium);
                        this.set("GrossPremium",e.GrossPremium);
                        this.set("EnteredPremium",e.EnteredPremium);
                        this.set("Commission",e.Commission);
                        this.set("Idx",e.Idx);
                        this.set("Empty",e.Empty);
                        this.set("Rate",e.Rate);
                        this.set("BlockPeriod",e.BlockPeriod);
                        this.set("IsCommencementDateInvalidWarning",e.IsCommencementDateInvalidWarning);
                        this.set("IsCommencementDateInvalid",e.IsCommencementDateInvalid);
                        this.set("IsCommencementDateAhead",e.IsCommencementDateAhead);
                        this.set("IsCommissionWithheld",e.IsCommissionWithheld);
                        this.set("IsExternal",e.IsExternal);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                }
}

blockreturndetail.IsEqual = function(entity){
        var e = entity;
        return this.ReturnUniqueId.toUpperCase() == e.ReturnUniqueId.toUpperCase();
}

return blockreturndetail;
}());
var BlockReturnSearchCriteria = (function() {
        var blockreturnsearchcriteria = {};
        blockreturnsearchcriteria.FullAddress = null;
        blockreturnsearchcriteria.PolicyUniqueId = null;
        blockreturnsearchcriteria.ReturnUniqueId = null;
        return blockreturnsearchcriteria;
}());
var BlockReturnSearchResult = (function() {
        var blockreturnsearchresult = {};
        blockreturnsearchresult.Period =  new Date();
        blockreturnsearchresult.DateImported = null;
        return blockreturnsearchresult;
}());
var CorrespondenceDownload = (function() {
        var correspondencedownload = {};
        correspondencedownload.CorrespondenceDownloadID = 0;
        correspondencedownload.TransactionID = 0;
        correspondencedownload.QueuedDate = null;
        correspondencedownload.RequesterID = 0;
        correspondencedownload.DownloadStatusID = 0;
        correspondencedownload.RequesterEmail = null;
        correspondencedownload.RequesterFirstName = null;
        correspondencedownload.RequesterLastName = null;
        correspondencedownload.RequesterName = " ";
        return correspondencedownload;
}());
var DeletedFile = (function() {
        var deletedfile = {};
        deletedfile.TransactionID = 0;
        deletedfile.DeletedDate = null;
        deletedfile.DeletedBy = null;
        deletedfile.ReasonID = { ID: 0, Value: "" };
        deletedfile.Other = null;
        deletedfile.PropertyAddress = null;
        deletedfile.FirmName = null;
        deletedfile.ObjectData = null;
        return deletedfile;
}());
var DeletedFileContext = (function() {
        var deletedfilecontext = {};
        deletedfilecontext.Transaction = null;
        deletedfilecontext.DeletedFile = null;
        return deletedfilecontext;
}());
var Document = (function() {
        var document = {};
        document.DocumentID = 0;
        document.UniqueId = "d5dd58f9-0380-4a72-8535-241aa18dff2f";
        document.TransactionID = 0;
        document.DocumentFolderUniqueId = null;
        document.ActivityLogUniqueId = null;
        document.PolicyEndorsementUniqueId = null;
        document.PolicyUniqueId = null;
        document.InvoiceUniqueId = null;
        document.DocumentTypeID = { ID: 0, Value: "" };
        document.ObjectKey = 0;
        document.FileName = null;
        document.RequiresUserInput = false;
        document.ContentStream = null;
        document.ContentLength = 0;
        document.IsSelected = false;
        document.Extend = function(){
                extend(this,"Document");
                this.IsDirty = false;
                this.IsNew = this.DocumentID == 0;
        }
        
        document.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("DocumentID",e.DocumentID);
                        this.set("TransactionID",e.TransactionID);
                        this.set("DocumentTypeID",e.DocumentTypeID);
                        this.set("DocumentFolderUniqueId",e.DocumentFolderUniqueId);
                        this.set("PolicyUniqueId",e.PolicyUniqueId);
                        this.set("PolicyEndorsementUniqueId",e.PolicyEndorsementUniqueId);
                        this.set("ActivityLogUniqueId",e.ActivityLogUniqueId);
                        this.set("InvoiceUniqueId",e.InvoiceUniqueId);
                        this.set("FileName",e.FileName);
                        this.set("ObjectKey",e.ObjectKey);
                        this.set("ContentLength",e.ContentLength);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                }
}

document.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return document;
}());
var DocumentClause = (function() {
        var documentclause = {};
        documentclause.DocumentClauseID = 0;
        documentclause.UniqueId = "401e2703-eaad-4612-a215-3362f5074d26";
        documentclause.PolicyUniqueId = null;
        documentclause.PolicyEndorsementUniqueId = null;
        documentclause.ClauseCategoryID = { ID: 0, Value: "" };
        documentclause.Wording = "";
        documentclause.Extend = function(){
                extend(this,"DocumentClause");
                this.IsDirty = false;
                this.IsNew = this.DocumentClauseID == 0;
        }
        
        documentclause.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("DocumentClauseID",e.DocumentClauseID);
                        this.set("PolicyUniqueId",e.PolicyUniqueId);
                        this.set("PolicyEndorsementUniqueId",e.PolicyEndorsementUniqueId);
                        this.set("ClauseCategoryID",e.ClauseCategoryID);
                        this.set("Wording",e.Wording);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                }
}

documentclause.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return documentclause;
}());
var DocumentFolder = (function() {
        var documentfolder = {};
        documentfolder.DocumentFolderID = 0;
        documentfolder.UniqueId = "3f6331f6-ceba-4f8f-acbb-fb834dc4b6e7";
        documentfolder.TransactionID = 0;
        documentfolder.FolderID = { ID: 0, Value: "" };
        documentfolder.Name = null;
        documentfolder.ParentUniqueId = null;
        documentfolder.SubfolderCollection = {};
        documentfolder.DocumentCollection = {};
        documentfolder.Extend = function(){
                extend(this,"DocumentFolder");
                extendCollection(this,"SubfolderCollection","DocumentFolder");
                extendCollection(this,"DocumentCollection","Document");
                this.IsDirty = false;
                this.IsNew = this.DocumentFolderID == 0;
        }
        
        documentfolder.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("DocumentFolderID",e.DocumentFolderID);
                        this.set("TransactionID",e.TransactionID);
                        this.set("ParentUniqueId",e.ParentUniqueId);
                        this.set("FolderID",e.FolderID);
                        this.set("Name",e.Name);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                        this.DocumentCollection.Update(e.DocumentCollection);
                        this.SubfolderCollection.Update(e.SubfolderCollection);
                }
}

documentfolder.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return documentfolder;
}());
var DocumentSearchCriteria = (function() {
        var documentsearchcriteria = {};
        documentsearchcriteria.TransactionID = 0;
        documentsearchcriteria.FolderID = 0;
        documentsearchcriteria.DocumentTypeID = 0;
        documentsearchcriteria.ParentUniqueId = null;
        documentsearchcriteria.DocumentFolderUniqueId = null;
        documentsearchcriteria.ActivityLogUniqueId = null;
        documentsearchcriteria.PolicyUniqueId = null;
        documentsearchcriteria.PolicyEndorsementUniqueId = null;
        documentsearchcriteria.FolderName = null;
        return documentsearchcriteria;
}());
var Draft = (function() {
        var draft = {};
        draft.DraftID = 0;
        draft.UniqueId = "281d7d86-df11-4a0b-a538-ff5f65451a08";
        draft.DocumentFolderUniqueId = null;
        draft.PolicyUniqueId = null;
        draft.PolicyEndorsementUniqueId = "";
        draft.InvoiceUniqueId = null;
        draft.DraftNumber = 1;
        draft.Description = "";
        draft.IsFinal = false;
        draft.UpdateRequired = false;
        draft.TemplateEdited = false;
        draft.EditedDate = null;
        draft.EditedBy = null;
        draft.GeneratedDate = null;
        draft.DocumentCollection = {};
        draft.DraftDocuments = null;
        draft.DraftTemplates = null;
        draft.Extend = function(){
                convertDate(this);
                extend(this,"Draft");
                extendCollection(this,"DocumentCollection","DraftDocument");
                this.IsDirty = false;
                this.IsNew = this.DraftID == 0;
        }
        
        draft.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("DraftID",e.DraftID);
                        this.set("PolicyUniqueId",e.PolicyUniqueId);
                        this.set("PolicyEndorsementUniqueId",e.PolicyEndorsementUniqueId);
                        this.set("InvoiceUniqueId",e.InvoiceUniqueId);
                        this.set("DraftNumber",e.DraftNumber);
                        this.set("Description",e.Description);
                        this.set("UpdateRequired",e.UpdateRequired);
                        this.set("TemplateEdited",e.TemplateEdited);
                        this.set("GeneratedDate",e.GeneratedDate);
                        this.set("EditedDate",e.EditedDate);
                        this.set("EditedBy",e.EditedBy);
                        this.set("DraftDocuments",e.DraftDocuments);
                        this.set("DraftTemplates",e.DraftTemplates);
                        this.set("IsFinal",e.IsFinal);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                        this.DocumentCollection.Update(e.DocumentCollection);
                }
}

draft.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return draft;
}());
var DraftDocument = (function() {
        var draftdocument = {};
        draftdocument.DraftDocumentID = 0;
        draftdocument.UniqueId = "c2a409b0-7dc3-43de-a092-a9a317e8a728";
        draftdocument.DraftUniqueId = null;
        draftdocument.DocumentUniqueId = null;
        draftdocument.Description = "";
        draftdocument.IsPolicy = false;
        draftdocument.IsTemplate = false;
        draftdocument.IsEditable = false;
        draftdocument.Sequence = 0;
        draftdocument.EditedDate = null;
        draftdocument.Document = null;
        draftdocument.DownloadUrl = null;
        draftdocument.DraftFolderUniqueId = null;
        draftdocument.Extend = function(){
                convertDate(this);
                extend(this,"DraftDocument");
                extendEntity(this,"Document");
                this.IsDirty = false;
                this.IsNew = this.DraftDocumentID == 0;
        }
        
        draftdocument.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("DraftDocumentID",e.DraftDocumentID);
                        this.set("DraftUniqueId",e.DraftUniqueId);
                        this.set("DocumentUniqueId",e.DocumentUniqueId);
                        this.set("Sequence",e.Sequence);
                        this.set("Description",e.Description);
                        this.set("DownloadUrl",e.DownloadUrl);
                        this.set("EditedDate",e.EditedDate);
                        this.set("IsPolicy",e.IsPolicy);
                        this.set("IsTemplate",e.IsTemplate);
                        this.set("IsEditable",e.IsEditable);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                        this.Document.Update(e.Document);
                }
}

draftdocument.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return draftdocument;
}());
var DraftSearchCriteria = (function() {
        var draftsearchcriteria = {};
        draftsearchcriteria.DraftUniqueId = null;
        draftsearchcriteria.PolicyUniqueId = null;
        draftsearchcriteria.PolicyEndorsementUniqueId = null;
        return draftsearchcriteria;
}());
var Flag = (function() {
        var flag = {};
        flag.FlagID = 0;
        flag.UniqueId = "0acef594-a977-40dd-90f6-01fba9bf955f";
        flag.TransactionID = 0;
        flag.QualificationFlagID = 0;
        flag.PolicyUniqueId = null;
        flag.Description = null;
        flag.Message = null;
        flag.Field = null;
        flag.IsCleared = false;
        flag.ClearedDate = null;
        flag.ClearedBy = null;
        flag.Extend = function(){
                extend(this,"Flag");
                this.IsDirty = false;
                this.IsNew = this.FlagID == 0;
        }
        
        flag.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("FlagID",e.FlagID);
                        this.set("TransactionID",e.TransactionID);
                        this.set("QualificationFlagID",e.QualificationFlagID);
                        this.set("PolicyUniqueId",e.PolicyUniqueId);
                        this.set("Field",e.Field);
                        this.set("Message",e.Message);
                        this.set("Description",e.Description);
                        this.set("ClearedBy",e.ClearedBy);
                        this.set("ClearedDate",e.ClearedDate);
                        this.set("IsCleared",e.IsCleared);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                }
}

flag.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return flag;
}());
var Invoice = (function() {
        var invoice = {};
        invoice.InvoiceID = 0;
        invoice.UniqueId = "4fed05e3-70bc-49d2-ba3f-1044449b7f6c";
        invoice.TransactionID = 0;
        invoice.InvoiceStatusID = { ID: 1, Value: "" };
        invoice.InvoiceNumber = null;
        invoice.BatchNumber = null;
        invoice.IsActive = false;
        invoice.QuotedDate = null;
        invoice.SavedDate = null;
        invoice.IssuedDate = null;
        invoice.IssuedBy = null;
        invoice.CancelledDate = null;
        invoice.CancelledBy = null;
        invoice.CancelledReason = null;
        invoice.PaymentStatusID = { ID: 0, Value: "" };
        invoice.IsPaymentTransferred = false;
        invoice.TransferredInvoiceNumber = null;
        invoice.IsBlockInvoice = false;
        invoice.TotalPremium = 0;
        invoice.TotalCommission = 0;
        invoice.TotalCommissionToBePaid = 0;
        invoice.TotalTax = 0;
        invoice.TotalIPT = 0;
        invoice.TotalVAT = 0;
        invoice.TotalNetPremium = 0;
        invoice.TotalPaid = 0;
        invoice.TotalLiability = 0;
        invoice.PolicyNumbers = null;
        invoice.ProductNames = null;
        invoice.FirmUniqueId = null;
        invoice.ProfileUniqueId = null;
        invoice.FirmAddressUniqueId = null;
        invoice.AgentFirmUniqueId = null;
        invoice.CurrencyID = { ID: 1, Value: "" };
        invoice.CancelledInvoiceNumber = null;
        invoice.CancelledProductNumbers = null;
        invoice.InvoiceItemCollection = {};
        invoice.ReinsuranceCollection = {};
        invoice.DocumentCollection = {};
        invoice.PaymentCollection = {};
        invoice.PaidTotal = 0;
        invoice.InvoiceHeader = " - 2020-11-25";
        invoice.GrandTotal = 0;
        invoice.SubTotal = 0;
        invoice.Tax = 0;
        invoice.IsSelected = false;
        invoice.InvoiceSummary = null;
        invoice.UpdateRequired = false;
        invoice.Sequence = 0;
        invoice.Extend = function(){
                convertDate(this);
                extend(this,"Invoice");
                extendCollection(this,"DocumentCollection","Document");
                extendCollection(this,"InvoiceItemCollection","InvoiceItem");
                extendCollection(this,"ReinsuranceCollection","Reinsurance");
                this.IsDirty = false;
                this.IsNew = this.InvoiceID == 0;
        }
        
        invoice.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("InvoiceID",e.InvoiceID);
                        this.set("TransactionID",e.TransactionID);
                        this.set("InvoiceStatusID",e.InvoiceStatusID);
                        this.set("PaymentStatusID",e.PaymentStatusID);
                        this.set("CurrencyID",e.CurrencyID);
                        this.set("InvoiceNumber",e.InvoiceNumber);
                        this.set("BatchNumber",e.BatchNumber);
                        this.set("FirmUniqueId",e.FirmUniqueId);
                        this.set("ProfileUniqueId",e.ProfileUniqueId);
                        this.set("FirmAddressUniqueId",e.FirmAddressUniqueId);
                        this.set("AgentFirmUniqueId",e.AgentFirmUniqueId);
                        this.set("QuotedDate",e.QuotedDate);
                        this.set("SavedDate",e.SavedDate);
                        this.set("IssuedBy",e.IssuedBy);
                        this.set("IssuedDate",e.IssuedDate);
                        this.set("CancelledBy",e.CancelledBy);
                        this.set("CancelledDate",e.CancelledDate);
                        this.set("CancelledReason",e.CancelledReason);
                        this.set("CancelledInvoiceNumber",e.CancelledInvoiceNumber);
                        this.set("CancelledProductNumbers",e.CancelledProductNumbers);
                        this.set("TransferredInvoiceNumber",e.TransferredInvoiceNumber);
                        this.set("IsPaymentTransferred",e.IsPaymentTransferred);
                        this.set("IsSelected",e.IsSelected);
                        this.set("IsBlockInvoice",e.IsBlockInvoice);
                        this.set("IsActive",e.IsActive);
                        this.set("IsNew",e.IsNew);
                        this.TotalPremium = e.TotalPremium;
                        this.TotalCommission = e.TotalCommission;
                        this.TotalTax = e.TotalTax;
                        this.TotalPaid = e.TotalPaid;
                        this.TotalNetPremium = e.TotalNetPremium;
                        this.TotalLiability = e.TotalLiability;
                        this.PolicyNumbers = e.PolicyNumbers;
                        this.ProductNames = e.ProductNames;
                        this.IsDirty = e.IsDirty;
                        this.DocumentCollection.Update(e.DocumentCollection);
                        this.InvoiceItemCollection.Update(e.InvoiceItemCollection);
                        this.ReinsuranceCollection.Update(e.ReinsuranceCollection);
                }
}

invoice.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return invoice;
}());
var InvoiceCriteria = (function() {
        var invoicecriteria = {};
        invoicecriteria.TransactionID = 0;
        invoicecriteria.FirmUniqueId = null;
        invoicecriteria.FirmDiscountID = { ID: 0, Value: "" };
        invoicecriteria.AgentFirmID = 0;
        invoicecriteria.IsIntegration = false;
        invoicecriteria.CommissionWithheld = { ID: 0, Value: "" };
        invoicecriteria.CountryID = { ID: 0, Value: "" };
        invoicecriteria.CreatedDate = null;
        invoicecriteria.PropertyTypeID = { ID: 0, Value: "" };
        invoicecriteria.IsBlockInvoice = false;
        invoicecriteria.CurrencyID = { ID: 0, Value: "" };
        invoicecriteria.InvoiceCollection = {};
        invoicecriteria.PolicyCollection = null;
        invoicecriteria.PolicyEndorsementCollection = null;
        return invoicecriteria;
}());
var InvoiceItem = (function() {
        var invoiceitem = {};
        invoiceitem.InvoiceItemID = 0;
        invoiceitem.UniqueId = "3b194ff6-05a1-4c7b-af24-6a6e7785343d";
        invoiceitem.InvoiceUniqueId = null;
        invoiceitem.PolicyUniqueId = null;
        invoiceitem.PolicyEndorsementUniqueId = null;
        invoiceitem.InvoiceItemTypeID = { ID: 0, Value: "" };
        invoiceitem.Amount = null;
        invoiceitem.Description = null;
        invoiceitem.Sequence = 0;
        invoiceitem.IsOverridden = false;
        invoiceitem.IsRateOverridden = false;
        invoiceitem.IsSelected = true;
        invoiceitem.PaidToFirmUniqueId = null;
        invoiceitem.FranchiseeUniqueId = null;
        invoiceitem.Multiplier = null;
        invoiceitem.PremiumHistoryCollection = {};
        invoiceitem.Extend = function(){
                extend(this,"InvoiceItem");
                extendCollection(this,"PremiumHistoryCollection","PremiumHistory");
                this.IsDirty = false;
                this.IsNew = this.InvoiceItemID == 0;
        }
        
        invoiceitem.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("InvoiceItemID",e.InvoiceItemID);
                        this.set("InvoiceUniqueId",e.InvoiceUniqueId);
                        this.set("PolicyUniqueId",e.PolicyUniqueId);
                        this.set("PolicyEndorsementUniqueId",e.PolicyEndorsementUniqueId);
                        this.set("InvoiceItemTypeID",e.InvoiceItemTypeID);
                        this.set("Amount",e.Amount);
                        this.set("Multiplier",e.Multiplier);
                        this.set("Description",e.Description);
                        this.set("Sequence",e.Sequence);
                        this.set("PaidToFirmUniqueId",e.PaidToFirmUniqueId);
                        this.set("FranchiseeUniqueId",e.FranchiseeUniqueId);
                        this.set("IsOverridden",e.IsOverridden);
                        this.set("IsRateOverridden",e.IsRateOverridden);
                        this.set("IsSelected",e.IsSelected);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                        this.PremiumHistoryCollection.Update(e.PremiumHistoryCollection);
                }
}

invoiceitem.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return invoiceitem;
}());
var InvoiceSearchCriteria = (function() {
        var invoicesearchcriteria = {};
        invoicesearchcriteria.InvoiceUniqueId = null;
        invoicesearchcriteria.FirmUniqueId = null;
        invoicesearchcriteria.InvoiceStatusID = { ID: 0, Value: "" };
        invoicesearchcriteria.PolicyNumber = null;
        invoicesearchcriteria.TransactionID = 0;
        invoicesearchcriteria.InvoiceNumber = null;
        invoicesearchcriteria.MaxResults = 0;
        invoicesearchcriteria.UnpaidOnly = false;
        invoicesearchcriteria.StartDate = null;
        invoicesearchcriteria.EndDate = null;
        invoicesearchcriteria.AccountingEmail = null;
        invoicesearchcriteria.CustomerID = null;
        invoicesearchcriteria.FirmAddressUniqueId = null;
        invoicesearchcriteria.AgentFirmUniqueId = null;
        invoicesearchcriteria.InvoicePolicyType = 0;
        invoicesearchcriteria.ExcludeAgentQuotes = false;
        invoicesearchcriteria.InvoiceSearchOrder = { ID: 1, Value: "IssuedDate" };
        return invoicesearchcriteria;
}());
var InvoiceSearchResult = (function() {
        var invoicesearchresult = {};
        invoicesearchresult.FirmName = null;
        invoicesearchresult.AccountingEmail = null;
        invoicesearchresult.AmountRefunded = null;
        invoicesearchresult.WriteOffAmount = null;
        invoicesearchresult.PaidDate = null;
        invoicesearchresult.IsBlockPolicy = false;
        invoicesearchresult.IsWriteOff = 0;
        invoicesearchresult.WriteOffTypeID = { ID: 0, Value: "" };
        invoicesearchresult.WriteOffDescription = null;
        invoicesearchresult.RemainingAmount = 0;
        invoicesearchresult.OutstandingAmount = 0;
        invoicesearchresult.ClientTotalPaid = 0;
        invoicesearchresult.CustomerId = null;
        return invoicesearchresult;
}());
var InvoiceStatusCriteria = (function() {
        var invoicestatuscriteria = {};
        invoicestatuscriteria.InvoiceUniqueId = null;
        invoicestatuscriteria.FirmUniqueId = null;
        invoicestatuscriteria.PaymentStatusID = 0;
        invoicestatuscriteria.AmountPaid = null;
        return invoicestatuscriteria;
}());
var InvoiceTransferCriteria = (function() {
        var invoicetransfercriteria = {};
        invoicetransfercriteria.InvoiceUniqueId = null;
        invoicetransfercriteria.IsPaymentTransferred = false;
        invoicetransfercriteria.TransferredInvoiceNumber = null;
        return invoicetransfercriteria;
}());
var NewProductRequestInfo = (function() {
        var newproductrequestinfo = {};
        newproductrequestinfo.Message = null;
        newproductrequestinfo.Contact = null;
        newproductrequestinfo.Quote = null;
        newproductrequestinfo.ActivityLog = null;
        newproductrequestinfo.Extend = function(){
                extend(this,"NewProductRequestInfo");
                extendEntity(this,"Quote","Quote");
                this.IsDirty = false;
        }
        
        newproductrequestinfo.Update = function(entity){
        }
        
        newproductrequestinfo.IsEqual = function(entity){
                return false;
        }
        
        return newproductrequestinfo;
}());
var Note = (function() {
        var note = {};
        note.NoteID = 0;
        note.UniqueId = "6da69f0e-f07f-4a85-963b-78f4dfc4aa2e";
        note.TransactionID = 0;
        note.PolicyUniqueId = null;
        note.PolicyEndorsementUniqueId = null;
        note.NoteTypeID = { ID: 0, Value: "" };
        note.Description = null;
        note.Extend = function(){
                extend(this,"Note");
                this.IsDirty = false;
                this.IsNew = this.NoteID == 0;
        }
        
        note.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("NoteID",e.NoteID);
                        this.set("TransactionID",e.TransactionID);
                        this.set("PolicyUniqueId",e.PolicyUniqueId);
                        this.set("PolicyEndorsementUniqueId",e.PolicyEndorsementUniqueId);
                        this.set("NoteTypeID",e.NoteTypeID);
                        this.set("Description",e.Description);
                        this.set("CreatedByID",e.CreatedByID);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                }
}

note.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return note;
}());
var OldPolicySearchCriteria = (function() {
        var oldpolicysearchcriteria = {};
        oldpolicysearchcriteria.TransactionID = 0;
        oldpolicysearchcriteria.PolicyNumber = null;
        oldpolicysearchcriteria.StreetName = null;
        oldpolicysearchcriteria.TownCity = null;
        oldpolicysearchcriteria.Postcode = null;
        oldpolicysearchcriteria.PropertyTypeID = 0;
        oldpolicysearchcriteria.FirmName = null;
        oldpolicysearchcriteria.PolicyTypeID = 0;
        oldpolicysearchcriteria.TransactionStatusId = 0;
        oldpolicysearchcriteria.Country = null;
        return oldpolicysearchcriteria;
}());
var OldPolicySearchResult = (function() {
        var oldpolicysearchresult = {};
        oldpolicysearchresult.TransactionID = 0;
        oldpolicysearchresult.PolicyNumber = null;
        oldpolicysearchresult.ReferenceNumber = null;
        oldpolicysearchresult.PolicyType = null;
        oldpolicysearchresult.PolicyStatus = null;
        oldpolicysearchresult.ProductName = null;
        oldpolicysearchresult.QuotationDate = null;
        oldpolicysearchresult.CommencementDate = null;
        oldpolicysearchresult.FirmName = null;
        oldpolicysearchresult.Country = null;
        oldpolicysearchresult.FullAddress = null;
        oldpolicysearchresult.PostCode = null;
        oldpolicysearchresult.InsuredUse = null;
        oldpolicysearchresult.TotalPaid = null;
        oldpolicysearchresult.TotalPremium = 0;
        return oldpolicysearchresult;
}());
var OrderInfo = (function() {
        var orderinfo = {};
        orderinfo.FirmUniqueId = null;
        orderinfo.FirmAddressUniqueId = null;
        orderinfo.ProfileUniqueId = null;
        orderinfo.CountryID = 0;
        orderinfo.Property = null;
        orderinfo.Invoice = null;
        orderinfo.PolicyCollection = null;
        orderinfo.PolicyEndorsementCollection = null;
        orderinfo.BlockPremiumCollection = null;
        orderinfo.InvoiceCollection = null;
        return orderinfo;
}());
var OutstandingMatter = (function() {
        var outstandingmatter = {};
        outstandingmatter.TransactionID = 0;
        outstandingmatter.PolicyType = "";
        outstandingmatter.Location = null;
        outstandingmatter.FullAddress = null;
        outstandingmatter.ProductName = null;
        outstandingmatter.PolicyNumbers = null;
        outstandingmatter.ReferenceNumber = null;
        outstandingmatter.IssuedDate = null;
        outstandingmatter.InvoiceNumber = null;
        outstandingmatter.TotalPremium = 0;
        outstandingmatter.TotalTax = 0;
        outstandingmatter.TotalCommission = 0;
        outstandingmatter.TotalPaid = 0;
        outstandingmatter.PaidDate = null;
        outstandingmatter.TotalNetPremium = 0;
        outstandingmatter.Outstanding = 0;
        outstandingmatter.TaxRate = 0;
        return outstandingmatter;
}());
var OutstandingMatterClient = (function() {
        var outstandingmatterclient = {};
        outstandingmatterclient.FirmUniqueId = null;
        outstandingmatterclient.FirmAddressUniqueId = null;
        outstandingmatterclient.Name = null;
        outstandingmatterclient.AccountingEmail = null;
        outstandingmatterclient.Outstanding = 0;
        outstandingmatterclient.CommissionWithheld = 0;
        return outstandingmatterclient;
}());
var OutstandingMatterCriteria = (function() {
        var outstandingmattercriteria = {};
        outstandingmattercriteria.FirmUniqueId = null;
        outstandingmattercriteria.StartDate = null;
        outstandingmattercriteria.EndDate = null;
        return outstandingmattercriteria;
}());
var OverrideReason = (function() {
        var overridereason = {};
        overridereason.OverrideReasonID = 0;
        overridereason.Name = null;
        overridereason.Description = null;
        overridereason.ProductTypeID = 0;
        overridereason.OverrideTypeID = 0;
        return overridereason;
}());
var Payment = (function() {
        var payment = {};
        payment.PaymentID = 0;
        payment.UniqueId = "cb193cfa-041a-4530-a22b-4ba691a7564e";
        payment.FirmUniqueId = null;
        payment.InvoiceUniqueId = null;
        payment.AmountPaid = null;
        payment.PaymentMethodID = { ID: 0, Value: "" };
        payment.ChequeNumber = null;
        payment.AccountNumber = null;
        payment.ChequeBatchNumber = null;
        payment.PaidDate = null;
        payment.PaidDateReceived = null;
        payment.IsWriteOff = 0;
        payment.IsReversal = false;
        payment.IsTest = 0;
        payment.WriteOffTypeID = { ID: 0, Value: "" };
        payment.WriteOffDescription = null;
        payment.PaymentTransferTypeID = 0;
        payment.IsPaymentTransfer = false;
        payment.FromPaymentID = 0;
        payment.AmountDue = null;
        payment.Total = null;
        payment.InvoiceAmountRefunded = null;
        payment.AmountToApply = null;
        payment.AmountAlreadyPaid = null;
        payment.FirmName = null;
        payment.InvoiceNumber = null;
        payment.TransactionID = 0;
        payment.IsExtracted = 0;
        payment.ToInvoiceNumber = null;
        payment.FromInvoiceNumber = null;
        payment.ExtractToLawson = false;
        payment.CurrencyID = { ID: 1, Value: "" };
        payment.Extend = function(){
                extend(this,"Payment");
                this.IsDirty = false;
                this.IsNew = this.PaymentID == 0;
        }
        
        payment.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("PaymentID",e.PaymentID);
                        this.set("InvoiceUniqueId",e.InvoiceUniqueId);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                }
}

payment.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return payment;
}());
var PaymentSearchCriteria = (function() {
        var paymentsearchcriteria = {};
        paymentsearchcriteria.InvoiceUniqueId = null;
        paymentsearchcriteria.FirmUniqueId = null;
        paymentsearchcriteria.InvoiceNumber = null;
        paymentsearchcriteria.InvoiceStatusID = 0;
        paymentsearchcriteria.PaidDate = null;
        paymentsearchcriteria.PaymentMethodID = { ID: 0, Value: "" };
        paymentsearchcriteria.ChequeNumber = null;
        paymentsearchcriteria.PaymentId = 0;
        paymentsearchcriteria.NoReversal = false;
        return paymentsearchcriteria;
}());
var PaymentSearchResult = (function() {
        var paymentsearchresult = {};
        paymentsearchresult.PaymentID = 0;
        paymentsearchresult.PaymentMethodID = 0;
        paymentsearchresult.TransactionID = 0;
        paymentsearchresult.FirmName = null;
        paymentsearchresult.PaymentTypeID = { ID: 0, Value: "" };
        paymentsearchresult.AccountingEmail = null;
        return paymentsearchresult;
}());
var Policy = (function() {
        var policy = {};
        policy.PolicyID = 0;
        policy.UniqueId = "156828a5-2e93-4195-8a53-34eb5d951631";
        policy.RiskID = 0;
        policy.TransactionID = 0;
        policy.PropertyUniqueId = null;
        policy.ReturnUniqueID = null;
        policy.ClaimStatusID = { ID: 3, Value: "" };
        policy.PolicyTypeID = { ID: 1, Value: "" };
        policy.PolicyStatusID = { ID: 1, Value: "" };
        policy.ReinsurerID = { ID: 0, Value: "" };
        policy.RiskTermID = 0;
        policy.PolicyTerm = null;
        policy.PolicyNumber = "";
        policy.Premium = 0;
        policy.Commission = 0;
        policy.Tax = 0;
        policy.VAT = 0;
        policy.NetPremium = 0;
        policy.IndemnityLimit = 0;
        policy.ReinsuredAmount = 0;
        policy.RetainedAmount = 0;
        policy.PercentageRate = 0;
        policy.CertificateRequired = { ID: 0, Value: "" };
        policy.CommencementDate = null;
        policy.SignedDate = null;
        policy.CancelledDate = null;
        policy.CancelledBy = null;
        policy.CancelledReason = null;
        policy.IsCustomized = true;
        policy.IsMigrated = false;
        policy.StatusChangedDate = null;
        policy.StatusChangedBy = null;
        policy.PolicyStatusReason = null;
        policy.PolicyStatusReasonID = { ID: 0, Value: "" };
        policy.CurrentPremium = 0;
        policy.Risk = {};
        policy.PolicyNotes = null;
        policy.WithCertificate = false;
        policy.Documents = [];
        policy.Clauses = [];
        policy.PolicyRequirementCollection = {};
        policy.PolicyEndorsementCollection = {};
        policy.ReturnCollection = {};
        policy.PremiumCollection = {};
        policy.CommissionCollection = {};
        policy.DraftCollection = {};
        policy.HasFinalizedDraft = false;
        policy.IsPolicyStatusChanged = false;
        policy.Extend = function(){
                convertDate(this);
                extend(this,"Policy");
                extendEntity(this,"Risk");
                extendCollection(this,"PolicyRequirementCollection","PolicyRequirement");
                extendCollection(this,"PolicyEndorsementCollection","PolicyEndorsement");
                extendCollection(this,"ReturnCollection","BlockReturn");
                extendCollection(this,"PremiumCollection","BlockPremium");
                extendCollection(this,"CommissionCollection","BlockCommission");
                extendCollection(this,"DraftCollection","Draft");
                this.IsDirty = false;
                this.IsNew = this.PolicyID == 0;
        }
        
        policy.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("PolicyID",e.PolicyID);
                        this.set("TransactionID",e.TransactionID);
                        this.set("PropertyUniqueId",e.PropertyUniqueId);
                        this.set("ReturnUniqueID",e.ReturnUniqueID);
                        this.set("RiskID",e.RiskID);
                        this.set("RiskTermID",e.RiskTermID);
                        this.set("PolicyTerm",e.PolicyTerm);
                        this.set("IndemnityLimit",e.IndemnityLimit);
                        this.set("ReinsuredAmount",e.ReinsuredAmount);
                        this.set("PercentageRate",e.PercentageRate);
                        this.set("Premium",e.Premium);
                        this.set("Commission",e.Commission);
                        this.set("Tax",e.Tax);
                        this.set("VAT",e.VAT);
                        this.set("NetPremium",e.NetPremium);
                        this.set("RetainedAmount",e.RetainedAmount);
                        this.set("CertificateRequired",e.CertificateRequired);
                        this.set("PolicyNumber",e.PolicyNumber);
                        this.set("PolicyStatusID",e.PolicyStatusID);
                        this.set("PolicyStatusReason",e.PolicyStatusReason);
                        this.set("PolicyStatusReasonID",e.PolicyStatusReasonID);
                        this.set("StatusChangedBy",e.StatusChangedBy);
                        this.set("StatusChangedDate",e.StatusChangedDate);
                        this.set("CommencementDate",e.CommencementDate);
                        this.set("SignedDate",e.SignedDate);
                        this.set("CancelledBy",e.CancelledBy);
                        this.set("CancelledDate",e.CancelledDate);
                        this.set("CancelledReason",e.CancelledReason);
                        this.set("Clauses",e.Clauses);
                        this.set("Documents",e.Documents);
                        this.set("IsMigrated",e.IsMigrated);
                        this.set("PolicyNotes",e.PolicyNotes);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                        this.Risk.Update(e.Risk);
                        this.PolicyRequirementCollection.Update(e.PolicyRequirementCollection);
                        this.PolicyEndorsementCollection.Update(e.PolicyEndorsementCollection);
                        this.PremiumCollection.Update(e.PremiumCollection);
                        this.CommissionCollection.Update(e.CommissionCollection);
                        this.DraftCollection.Update(e.DraftCollection);
                }
}

policy.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

policy.ProductName = null;
policy.ProductNumber = "";
policy.ProductType = 1;
return policy;
}());
var PolicyEndorsement = (function() {
        var policyendorsement = {};
        policyendorsement.PolicyEndorsementID = 0;
        policyendorsement.UniqueId = "163db6d5-3fee-4151-a5bc-0053577f01d9";
        policyendorsement.PolicyUniqueId = null;
        policyendorsement.EndorsementID = 0;
        policyendorsement.EndorsementStatusID = { ID: 0, Value: "" };
        policyendorsement.EndorsementNumber = null;
        policyendorsement.UnderwriterID = 0;
        policyendorsement.ProfileUniqueId = null;
        policyendorsement.ReferenceNumber = null;
        policyendorsement.AgentFirmUniqueId = null;
        policyendorsement.FirmUniqueId = null;
        policyendorsement.FirmAddressUniqueId = null;
        policyendorsement.ContactMethodID = { ID: 0, Value: "" };
        policyendorsement.PaymentTypeID = { ID: 0, Value: "" };
        policyendorsement.IndemnityLimit = 0;
        policyendorsement.ReinsuredAmount = 0;
        policyendorsement.Premium = 0;
        policyendorsement.Tax = 0;
        policyendorsement.VAT = 0;
        policyendorsement.Commission = 0;
        policyendorsement.NetPremium = 0;
        policyendorsement.CommencementDate = null;
        policyendorsement.SignedDate = null;
        policyendorsement.CancelledDate = null;
        policyendorsement.CancelledBy = null;
        policyendorsement.CancelledReason = null;
        policyendorsement.ContactFirmUniqueId = null;
        policyendorsement.ContactProfileUniqueId = null;
        policyendorsement.ContactFirmAddressUniqueId = null;
        policyendorsement.ContactFirmContactMethodID = { ID: 0, Value: "" };
        policyendorsement.DocumentClause = {};
        policyendorsement.Documents = [];
        policyendorsement.Endorsement = {};
        policyendorsement.DraftCollection = {};
        policyendorsement.HasFinalizedDraft = false;
        policyendorsement.FirmCommissionWithheld = { ID: 0, Value: "" };
        policyendorsement.ContactEmail = null;
        policyendorsement.PolicyCommencementDate = null;
        policyendorsement.PolicyName = null;
        policyendorsement.AgentFirm = null;
        policyendorsement.ContactProfile = null;
        policyendorsement.ContactFirmAddress = null;
        policyendorsement.ContactBillingFirm = true;
        policyendorsement.Extend = function(){
                extend(this,"PolicyEndorsement");
                extendEntity(this,"Endorsement","Endorsement");
                extendEntity(this,"Document","Document");
                extendEntity(this,"DocumentClause","DocumentClause");
                extendCollection(this,"DraftCollection","Draft");
                this.IsDirty = false;
                this.IsNew = this.EndorsementID == 0;
        }
        
        policyendorsement.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("PolicyEndorsementID",e.PolicyEndorsementID);
                        this.set("EndorsementID",e.EndorsementID);
                        this.set("EndorsementNumber",e.EndorsementNumber);
                        this.set("EndorsementStatusID",e.EndorsementStatusID);
                        this.set("PolicyUniqueId",e.PolicyUniqueId);
                        this.set("UnderwriterID",e.UnderwriterID);
                        this.set("ContactMethodID",e.ContactMethodID);
                        this.set("AgentFirmUniqueId",e.AgentFirmUniqueId);
                        this.set("FirmUniqueId",e.FirmUniqueId);
                        this.set("FirmAddressUniqueId",e.FirmAddressUniqueId);
                        this.set("FirmCommissionWithheld",e.FirmCommissionWithheld);
                        this.set("ContactFirmUniqueId",e.ContactFirmUniqueId);
                        this.set("ContactProfileUniqueId",e.ContactProfileUniqueId);
                        this.set("ContactFirmAddressUniqueId",e.ContactFirmAddressUniqueId);
                        this.set("ContactFirmContactMethodID",e.ContactFirmContactMethodID);
                        this.set("PaymentTypeID",e.PaymentTypeID);
                        this.set("IndemnityLimit",e.IndemnityLimit);
                        this.set("ReinsuredAmount",e.ReinsuredAmount);
                        this.set("Commission",e.Commission);
                        this.set("CommencementDate",e.CommencementDate);
                        this.set("SignedDate",e.SignedDate);
                        this.set("CancelledBy",e.CancelledBy);
                        this.set("CancelledDate",e.CancelledDate);
                        this.set("CancelledReason",e.CancelledReason);
                        this.set("ContactEmail",e.ContactEmail);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                        this.DocumentClause.Update(e.DocumentClause);
                        this.DraftCollection.Update(e.DraftCollection);
                }
}

policyendorsement.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

policyendorsement.ProductName = null;
policyendorsement.ProductNumber = null;
policyendorsement.ProductType = 0;
return policyendorsement;
}());
var PolicyHistory = (function() {
        var policyhistory = {};
        policyhistory.PolicyHistoryID = 0;
        policyhistory.UniqueId = "1e6716fd-b7e0-4b36-b532-cf74ff2c1b4d";
        policyhistory.TransactionID = 0;
        policyhistory.InvoiceUniqueId = null;
        policyhistory.PolicyUniqueId = null;
        policyhistory.PolicyEndorsementUniqueId = null;
        policyhistory.ReinsuranceUniqueId = null;
        policyhistory.IndemnityLimit = 0;
        policyhistory.EventID = { ID: 0, Value: "" };
        policyhistory.Reinsurance = {};
        policyhistory.Extend = function(){
                extend(this,"PolicyHistory");
                extendEntity(this,"Reinsurance");
                this.IsDirty = false;
                this.IsNew = this.PolicyHistoryID == 0;
        }
        
        policyhistory.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("PolicyHistoryID",e.PolicyHistoryID);
                        this.set("InvoiceUniqueId",e.InvoiceUniqueId);
                        this.set("PolicyUniqueId",e.PolicyUniqueId);
                        this.set("PolicyEndorsementUniqueId",e.PolicyEndorsementUniqueId);
                        this.set("ReinsuranceUniqueId",e.ReinsuranceUniqueId);
                        this.set("EventID",e.EventID);
                        this.set("IndemnityLimit",e.IndemnityLimit);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                        this.Reinsurance.Update(e.Reinsurance);
                }
}

policyhistory.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return policyhistory;
}());
var PolicyRequirement = (function() {
        var policyrequirement = {};
        policyrequirement.PolicyRequirementID = 0;
        policyrequirement.UniqueId = "510e31b5-d13b-4944-8694-3ee4b65a2295";
        policyrequirement.RiskID = 0;
        policyrequirement.RequirementHistoryID = 0;
        policyrequirement.PolicyUniqueId = null;
        policyrequirement.RequirementTypeID = { ID: 0, Value: "" };
        policyrequirement.RequirementStatusID = { ID: 0, Value: "" };
        policyrequirement.Description = null;
        policyrequirement.Sequence = 0;
        policyrequirement.Answer = 0;
        policyrequirement.IsExternal = 0;
        policyrequirement.CompletedDate = null;
        policyrequirement.CompletedBy = null;
        policyrequirement.Requirement = {};
        policyrequirement.Extend = function(){
                convertDate(this);
                extend(this,"PolicyRequirement");
                this.IsDirty = false;
                this.IsNew = this.PolicyRequirementID == 0;
        }
        
        policyrequirement.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("PolicyUniqueId",e.PolicyUniqueId);
                        this.set("PolicyRequirementID",e.PolicyRequirementID);
                        this.set("RequirementTypeID",e.RequirementTypeID);
                        this.set("RequirementStatusID",e.RequirementStatusID);
                        this.set("RequirementHistoryID",e.RequirementHistoryID);
                        this.set("RiskID",e.RiskID);
                        this.set("Requirement",e.Requirement);
                        this.set("CompletedBy",e.CompletedBy);
                        this.set("CompletedDate",e.CompletedDate);
                        this.set("Answer",e.Answer);
                        this.set("Sequence",e.Sequence);
                        this.set("Description",e.Description);
                        this.set("IsExternal",e.IsExternal);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                }
}

policyrequirement.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return policyrequirement;
}());
var PolicySearchCriteria = (function() {
        var policysearchcriteria = {};
        policysearchcriteria.MaxResults = 50;
        policysearchcriteria.TransactionID = 0;
        policysearchcriteria.ReferenceNumber = null;
        policysearchcriteria.PolicyNumber = null;
        policysearchcriteria.PolicyStatusID = { ID: 0, Value: "" };
        policysearchcriteria.PolicyTypeID = { ID: 0, Value: "" };
        policysearchcriteria.IsReferred = false;
        policysearchcriteria.PropertyTypeID = { ID: 0, Value: "" };
        policysearchcriteria.Postcode = null;
        policysearchcriteria.CountryID = { ID: 0, Value: "" };
        policysearchcriteria.FullAddress = null;
        policysearchcriteria.IndemnityLimitMinimum = null;
        policysearchcriteria.IndemnityLimitMaximum = null;
        policysearchcriteria.RiskName = null;
        policysearchcriteria.FirmUniqueId = null;
        policysearchcriteria.UnderwriterID = 0;
        policysearchcriteria.StartDate = null;
        policysearchcriteria.EndDate = null;
        policysearchcriteria.RiskID = null;
        policysearchcriteria.SearchType = { ID: 0, Value: "" };
        policysearchcriteria.EmployeeID = 0;
        policysearchcriteria.BlockReturnUniqueId = null;
        return policysearchcriteria;
}());
var PolicySearchEntity = (function() {
        var policysearchentity = {};
        policysearchentity.SearchID = 0;
        policysearchentity.TransactionID = 0;
        policysearchentity.BusinessSourceID = { ID: 0, Value: "" };
        policysearchentity.FirmUniqueId = null;
        policysearchentity.FirmName = null;
        policysearchentity.ProfileUniqueId = null;
        policysearchentity.UnderwriterID = 0;
        policysearchentity.ReferenceNumber = null;
        policysearchentity.IsReferred = false;
        policysearchentity.IsAccessibleExternally = false;
        policysearchentity.CreatedDate = null;
        policysearchentity.CreatedBy = null;
        policysearchentity.PolicyUniqueId = null;
        policysearchentity.PolicyTypeID = { ID: 0, Value: "" };
        policysearchentity.PolicyStatusID = { ID: 0, Value: "" };
        policysearchentity.ClaimStatusID = { ID: 0, Value: "" };
        policysearchentity.CommencementDate = null;
        policysearchentity.PolicyNumber = null;
        policysearchentity.RiskID = 0;
        policysearchentity.RiskName = null;
        policysearchentity.EndorsementFirmUniqueIds = null;
        policysearchentity.BlockReturnUniqueId = null;
        policysearchentity.PropertyTypeID = { ID: 0, Value: "" };
        policysearchentity.CountryID = { ID: 0, Value: "" };
        policysearchentity.Postcode = null;
        policysearchentity.FullAddress = null;
        policysearchentity.IndemnityLimit = null;
        policysearchentity.QuotedDate = null;
        policysearchentity.QuoteNumber = null;
        policysearchentity.QuoteStatusID = { ID: 0, Value: "" };
        policysearchentity.BulkPlaceHolder = 0;
        policysearchentity.InvoiceUniqueId = null;
        return policysearchentity;
}());
var PolicySearchResult = (function() {
        var policysearchresult = {};
        policysearchresult.TransactionID = 0;
        policysearchresult.BusinessSourceID = { ID: 0, Value: "" };
        policysearchresult.PolicyTypeID = { ID: 0, Value: "" };
        policysearchresult.PolicyStatusID = { ID: 0, Value: "" };
        policysearchresult.RiskName = null;
        policysearchresult.RiskID = 0;
        policysearchresult.ClaimStatusID = { ID: 0, Value: "" };
        policysearchresult.PolicyNumber = null;
        policysearchresult.PolicyUniqueId = null;
        policysearchresult.CreatedDate = null;
        policysearchresult.CommencementDate = null;
        policysearchresult.FirmUniqueId = null;
        policysearchresult.FirmName = null;
        policysearchresult.CommissionWithheld = false;
        policysearchresult.CountryID = { ID: 0, Value: "" };
        policysearchresult.FullAddress = null;
        policysearchresult.PostCode = null;
        policysearchresult.IsReferred = false;
        policysearchresult.UnderwriterID = 0;
        policysearchresult.WithCertificate = false;
        policysearchresult.PropertyAddress = "";
        return policysearchresult;
}());
var PremiumHistory = (function() {
        var premiumhistory = {};
        premiumhistory.PremiumHistoryID = 0;
        premiumhistory.UniqueId = "5cbf52c6-ebd4-44b4-954f-e7b8ecdae0a4";
        premiumhistory.InvoiceItemUniqueId = null;
        premiumhistory.OverrideReasonID = 0;
        premiumhistory.OverrideReason = null;
        premiumhistory.PreviousPremium = null;
        premiumhistory.CurrentPremium = 0;
        premiumhistory.Extend = function(){
                extend(this,"PremiumHistoryID");
                this.IsDirty = false;
                this.IsNew = this.PremiumHistoryID == 0;
        }
        
        premiumhistory.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("PremiumHistoryID",e.PremiumHistoryID);
                        this.set("InvoiceItemUniqueId",e.InvoiceItemUniqueId);
                        this.set("OverrideReasonID",e.OverrideReasonID);
                        this.set("OverrideReason",e.OverrideReason);
                        this.set("PreviousPremium",e.PreviousPremium);
                        this.set("CurrentPremium",e.CurrentPremium);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                }
}

premiumhistory.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return premiumhistory;
}());
var Property = (function() {
        var property = {};
        property.PropertyID = 0;
        property.UniqueId = "b8113e46-f8ec-4674-ae03-cfdc52441de7";
        property.TransactionID = 0;
        property.ReturnUniqueID = null;
        property.PropertyTypeID = { ID: 0, Value: "" };
        property.InsuredUseID = { ID: 1, Value: "" };
        property.Postcode = "";
        property.FullAddress = null;
        property.CountryID = { ID: 0, Value: "" };
        property.PropertyAddress = null;
        property.Extend = function(){
                convertDate(this);
                extend(this,"Property");
                this.IsDirty = false;
                this.IsNew = this.PropertyID == 0;
        }
        
        property.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("PropertyID",e.PropertyID);
                        this.set("TransactionID",e.TransactionID);
                        this.set("PropertyTypeID",e.PropertyTypeID);
                        this.set("ReturnUniqueID",e.ReturnUniqueID);
                        this.set("InsuredUseID",e.InsuredUseID);
                        this.set("Postcode",e.Postcode);
                        this.set("FullAddress",e.FullAddress);
                        this.set("CountryID",e.CountryID);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                }
}

property.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return property;
}());
var PropertySearchCriteria = (function() {
        var propertysearchcriteria = {};
        propertysearchcriteria.PropertyUniqueId = null;
        propertysearchcriteria.FullAddress = null;
        return propertysearchcriteria;
}());
var Quote = (function() {
        var quote = {};
        quote.ID = 0;
        quote.Firm = null;
        quote.TransactionID = null;
        quote.FirmUniqueId = null;
        quote.ProfileUniqueId = null;
        quote.FirmAddressUniqueId = null;
        quote.AgentFirmUniqueId = null;
        quote.AgentFirm = null;
        quote.Reference = null;
        quote.UnderwriterID = 0;
        quote.ReferenceNumber = null;
        quote.ContactMethodID = { ID: 0, Value: "" };
        quote.BusinessSourceID = { ID: 0, Value: "" };
        quote.AllowedEditCount = 0;
        quote.IndemnityLimit = null;
        quote.AnswersVerified = false;
        quote.Property = null;
        quote.Invoice = null;
        quote.QuotedDate = null;
        quote.SavedDate = null;
        quote.ContactName = null;
        quote.ContactEmail = null;
        quote.NotificationTypeID = { ID: 0, Value: "" };
        quote.Task = null;
        quote.CommencementDate = null;
        quote.RiskCollection = null;
        quote.RequirementCollection = null;
        quote.PolicyCollection = null;
        quote.FlagCollection = null;
        quote.NoteCollection = null;
        quote.PolicyHistoryCollection = null;
        quote.IsReferred = false;
        quote.IsAccessibleExternally = false;
        quote.CanEditReferredQuote = false;
        quote.IsQuoteEditable = false;
        quote.IsPending = function(){
                return this.QuotedDate != null || this.SavedDate != null && !this.IsOrdered();
        }
        
        quote.IsOrdered = function(){
                return this.Invoice.InvoiceStatusID == InvoiceStatusesEnum.Ordered;
        }
        
        quote.HasSearchProducts = function(){
                return PolicyCollection.Items.SelectMany(p.Risk.RiskCovers).Any(r.IsSearch);
        }
        
        quote.HasNonSearchProducts = function(){
                return PolicyCollection.Items.SelectMany(p.Risk.RiskCovers).Any(!r.IsSearch);
        }
        
        quote.IsSearchProduct = function(p){
                return p.Risk.RiskCovers.Any(r.IsSearch);
        }
        
        quote.IsQuickQuote = false;
        quote.Extend = function(){
                convertDate(this);
                extend(this,"Quote");
                extendEntity(this,"Firm");
                extendEntity(this,"Invoice");
                extendEntity(this,"Property");
                extendCollection(this,"RiskCollection","Risk");
                extendCollection(this,"PolicyCollection","Policy");
                extendCollection(this,"FlagCollection","Flag");
                extendCollection(this,"NoteCollection","Note");
                extendCollection(this,"RequirementCollection","PolicyRequirement");
                extendCollection(this,"PolicyHistoryCollection","PolicyHistory");
                this.IsDirty = false;
                this.IsNew = this.TransactionID == null;
        }
        
        quote.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("TransactionID",e.TransactionID);
                        this.set("ReferenceNumber",e.ReferenceNumber);
                        this.set("ModifiedCount",e.ModifiedCount);
                        this.set("CreatedBy",e.CreatedBy);
                        this.set("CreatedByID",e.CreatedByID);
                        this.set("CreatedDate",e.CreatedDate);
                        this.set("ModifiedBy",e.ModifiedBy);
                        this.set("ModifiedByID",e.ModifiedByID);
                        this.set("ModifiedDate",e.ModifiedDate);
                        this.set("QuotedDate",e.QuotedDate);
                        this.set("SavedDate",e.SavedDate);
                        this.set("IsReadOnly",e.IsReadOnly);
                        this.set("IsReferred",e.IsReferred);
                        this.set("IsQuoteEditable",e.IsQuoteEditable);
                        this.set("CanEditReferredQuote",e.CanEditReferredQuote);
                        this.set("IndemnityLimit",e.IndemnityLimit);
                        this.set("AllErrors",e.AllErrors);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                        this.Property.Update(e.Property);
                        this.Invoice.Update(e.Invoice);
                        this.RequirementCollection.Update(e.RequirementCollection);
                        this.PolicyCollection.Update(e.PolicyCollection);
                        this.FlagCollection.Update(e.FlagCollection);
                        this.NoteCollection.Update(e.NoteCollection);
                }
}

quote.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return quote;
}());
var QuoteCriteria = (function() {
        var quotecriteria = {};
        quotecriteria.PolicyTypeID = { ID: 0, Value: "" };
        quotecriteria.CountryID = { ID: 0, Value: "" };
        quotecriteria.PropertyTypeID = { ID: 0, Value: "" };
        quotecriteria.Risks = [];
        quotecriteria.Policies = null;
        quotecriteria.Requirements = [];
        quotecriteria.ClauseSearchResults = [];
        quotecriteria.RiskID = 0;
        quotecriteria.RiskCategoryID = 0;
        quotecriteria.EndorsementID = 0;
        quotecriteria.IsOnline = false;
        quotecriteria.ClauseCategoryID = 0;
        quotecriteria.TemplateTypeID = 0;
        quotecriteria.RequirementTypeID = 0;
        quotecriteria.InvoiceItemTypeID = 0;
        quotecriteria.InsuredUseID = 0;
        quotecriteria.IndemnityLimit = null;
        quotecriteria.IsOverridden = false;
        quotecriteria.CommencementDate = null;
        quotecriteria.EffectiveDate = null;
        quotecriteria.GetKeywords = false;
        return quotecriteria;
}());
var QuoteSearchCriteria = (function() {
        var quotesearchcriteria = {};
        quotesearchcriteria.MaxResults = 0;
        quotesearchcriteria.TransactionID = 0;
        quotesearchcriteria.ReferenceNumber = null;
        quotesearchcriteria.QuoteStatusID = { ID: 0, Value: "" };
        quotesearchcriteria.ProfileUniqueId = null;
        quotesearchcriteria.FullAddress = null;
        quotesearchcriteria.Postcode = null;
        quotesearchcriteria.CountryID = { ID: 0, Value: "" };
        quotesearchcriteria.PropertyTypeID = { ID: 0, Value: "" };
        quotesearchcriteria.RiskName = null;
        quotesearchcriteria.StartDate = null;
        quotesearchcriteria.EndDate = null;
        quotesearchcriteria.FirmUniqueId = null;
        quotesearchcriteria.QuoteNumber = null;
        quotesearchcriteria.TransactionStatusID = { ID: 0, Value: "" };
        quotesearchcriteria.RiskID = null;
        quotesearchcriteria.IsReferred = false;
        quotesearchcriteria.SearchType = { ID: 0, Value: "" };
        quotesearchcriteria.AgentFirmUniqueId = null;
        quotesearchcriteria.IsDirty = false;
        return quotesearchcriteria;
}());
var QuoteSearchResult = (function() {
        var quotesearchresult = {};
        quotesearchresult.StartDate = null;
        quotesearchresult.EndDate = null;
        quotesearchresult.TransactionID = 0;
        quotesearchresult.IsReferred = false;
        quotesearchresult.QuoteNumber = null;
        quotesearchresult.ProfileUniqueId = null;
        quotesearchresult.QuoteStatusID = { ID: 0, Value: "" };
        quotesearchresult.PropertyTypeID = { ID: 0, Value: "" };
        quotesearchresult.IndemnityLimit = 0;
        quotesearchresult.CountryID = { ID: 0, Value: "" };
        quotesearchresult.PolicyStatusID = { ID: 0, Value: "" };
        quotesearchresult.PolicyUniqueId = null;
        quotesearchresult.Postcode = null;
        quotesearchresult.FullAddress = null;
        quotesearchresult.RiskName = null;
        quotesearchresult.QuotedDate = null;
        quotesearchresult.CreatedDate = null;
        quotesearchresult.CreatedBy = null;
        quotesearchresult.ReferenceNumber = null;
        quotesearchresult.PolicyNumber = null;
        return quotesearchresult;
}());
var Refund = (function() {
        var refund = {};
        refund.RefundID = 0;
        refund.UniqueId = "6bcbee62-82ac-4ed2-84b9-d6534e7972c9";
        refund.InvoiceUniqueId = null;
        refund.AmountRefunded = 0;
        refund.RefundDate = null;
        refund.FirmUniqueId = null;
        refund.Description = null;
        refund.InvoiceNumber = null;
        refund.Extend = function(){
                convertDate(this);
                extend(this,"Refund");
                this.IsDirty = false;
                this.IsNew = this.RefundID == 0;
        }
        
        refund.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("RefundID",e.RefundID);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                }
}

refund.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return refund;
}());
var RefundSearchCriteria = (function() {
        var refundsearchcriteria = {};
        refundsearchcriteria.FirmUniqueId = null;
        refundsearchcriteria.InvoiceNumber = null;
        refundsearchcriteria.RefundDate = null;
        return refundsearchcriteria;
}());
var Reinsurance = (function() {
        var reinsurance = {};
        reinsurance.ReinsuranceID = 0;
        reinsurance.UniqueId = "ed1e8c02-ef58-43bc-9697-2b4465039123";
        reinsurance.InvoiceUniqueId = null;
        reinsurance.PolicyUniqueId = null;
        reinsurance.PolicyEndorsementUniqueId = null;
        reinsurance.ReinsurerID = { ID: 0, Value: "" };
        reinsurance.ReinsurerName = null;
        reinsurance.ReinsuredAmount = 0;
        reinsurance.ReferenceNumber = null;
        reinsurance.Extend = function(){
                extend(this,"Reinsurance");
                this.IsDirty = false;
                this.IsNew = this.ReinsuranceID == 0;
        }
        
        reinsurance.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("ReinsuranceID",e.ReinsuranceID);
                        this.set("InvoiceUniqueId",e.InvoiceUniqueId);
                        this.set("PolicyUniqueId",e.PolicyUniqueId);
                        this.set("PolicyEndorsementUniqueId",e.PolicyEndorsementUniqueId);
                        this.set("ReinsurerID",e.ReinsurerID);
                        this.set("ReinsurerName",e.ReinsurerName);
                        this.set("ReinsuredAmount",e.ReinsuredAmount);
                        this.set("ReferenceNumber",e.ReferenceNumber);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                }
}

reinsurance.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

return reinsurance;
}());
var SaveSingleMessageResult = (function() {
        var savesinglemessageresult = {};
        savesinglemessageresult.Status = false;
        savesinglemessageresult.TransactionID = 0;
        savesinglemessageresult.ExceptionLog = null;
        savesinglemessageresult.ExceptionType = null;
        savesinglemessageresult.ErrorNumber = 0;
        return savesinglemessageresult;
}());
var Task = (function() {
        var task = {};
        task.TaskID = 0;
        task.TransactionID = 0;
        task.FileCreatedDate = null;
        task.TaskStatusID = { ID: 1, Value: "" };
        task.TaskTypeID = { ID: 1, Value: "" };
        task.IsUrgent = false;
        task.AssignedToID = 0;
        task.AssignedTo = null;
        task.AssignedDate = null;
        task.CompletedDate = null;
        task.FirmUniqueId = null;
        task.FirmName = null;
        task.FullAddress = null;
        task.CountryID = { ID: 0, Value: "" };
        task.CountryAbbr = null;
        task.IndemnityLimit = 0;
        task.RiskCategoryID = 0;
        task.RiskCategoryName = null;
        task.Note = null;
        task.BusinessSourceID = { ID: 2, Value: "" };
        task.ActivityLogCollection = {};
        task.Firm = null;
        task.OrderingFirm = null;
        task.Profile = null;
        task.PrincipalFirm = null;
        task.PaymentTypeID = 0;
        task.RiskCategory = null;
        task.Underwriter = null;
        task.SetAssignedDate = 0;
        task.Extend = function(){
                convertDate(this);
                extend(this,"Task");
                extendEntity(this,"Firm");
                extendEntity(this,"Profile");
                extendCollection(this,"ActivityLogCollection","ActivityLog");
                this.IsDirty = false;
                this.IsNew = this.TaskID == 0;
        }
        
        task.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("UniqueId",e.UniqueId);
                        this.set("TaskID",e.TaskID);
                        this.set("TransactionID",e.TransactionID);
                        this.set("TaskStatusID",e.TaskStatusID);
                        this.set("TaskTypeID",e.TaskTypeID);
                        this.set("AssignedToID",e.AssignedToID);
                        this.set("AssignedDate",e.AssignedDate);
                        this.set("CompletedDate",e.CompletedDate);
                        this.set("FirmUniqueId",e.FirmUniqueId);
                        this.set("FullAddress",e.FullAddress);
                        this.set("CountryID",e.CountryID);
                        this.set("CountryAbbr",e.CountryAbbr);
                        this.set("IndemnityLimit",e.IndemnityLimit);
                        this.set("RiskCategoryID",e.RiskCategoryID);
                        this.set("RiskCategoryName",e.RiskCategoryName);
                        this.set("Note",e.Note);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                        this.ActivityLogCollection.Update(e.ActivityLogCollection);
                }
}

task.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

task.IsAssigned = false;
task.PropertyAddress = "";
return task;
}());
var TaskSearchCriteria = (function() {
        var tasksearchcriteria = {};
        tasksearchcriteria.SearchTypeID = { ID: 0, Value: "" };
        tasksearchcriteria.AssignedToID = 0;
        tasksearchcriteria.TaskStatusID = { ID: 0, Value: "" };
        return tasksearchcriteria;
}());
var TaskSearchResult = (function() {
        var tasksearchresult = {};
        tasksearchresult.TaskID = 0;
        tasksearchresult.TransactionID = 0;
        tasksearchresult.FileCreatedDate = null;
        tasksearchresult.AssignedToID = 0;
        tasksearchresult.AssignedDate = null;
        tasksearchresult.FirmName = null;
        tasksearchresult.FullAddress = null;
        tasksearchresult.CountryID = { ID: 0, Value: "" };
        tasksearchresult.TaskTypeID = { ID: 0, Value: "" };
        tasksearchresult.TaskStatusID = { ID: 0, Value: "" };
        tasksearchresult.IsUrgent = false;
        tasksearchresult.IndemnityLimit = 0;
        tasksearchresult.RiskCategoryName = null;
        tasksearchresult.Note = null;
        tasksearchresult.PropertyAddress = "";
        return tasksearchresult;
}());
var Transaction = (function() {
        var transaction = {};
        transaction.TransactionID = 0;
        transaction.TransactionStatusID = { ID: 0, Value: "" };
        transaction.IsBlockContainer = false;
        transaction.IsForeignContainer = false;
        transaction.ReferenceNumber = null;
        transaction.EnquiryLocationID = 0;
        transaction.BusinessSourceID = { ID: 2, Value: "" };
        transaction.UnderwriterID = 0;
        transaction.ProfileUniqueId = null;
        transaction.FirmUniqueId = null;
        transaction.FirmAddressUniqueId = null;
        transaction.ContactMethodID = { ID: 0, Value: "" };
        transaction.AgentFirmUniqueId = null;
        transaction.PaymentTypeID = { ID: 0, Value: "" };
        transaction.RequirementsVerified = 0;
        transaction.CanEditReferredQuote = false;
        transaction.IsReferred = false;
        transaction.IsQuoteEditable = false;
        transaction.IsAccessibleExternally = false;
        transaction.WhiteLabelID = { ID: 0, Value: "" };
        transaction.IsMigrated = false;
        transaction.IsReinsured = false;
        transaction.ContactName = null;
        transaction.ContactEmail = null;
        transaction.NotificationTypeID = { ID: 0, Value: "" };
        transaction.ContactFirmUniqueId = null;
        transaction.ContactProfileUniqueId = null;
        transaction.ContactFirmAddressUniqueId = null;
        transaction.ContactFirmContactMethodID = { ID: 0, Value: "" };
        transaction.ActivityLogCollection = {};
        transaction.DocumentFolderCollection = {};
        transaction.FlagCollection = {};
        transaction.InvoiceCollection = {};
        transaction.NoteCollection = {};
        transaction.PolicyCollection = {};
        transaction.PolicyEndorsementCollection = {};
        transaction.PolicyHistoryCollection = {};
        transaction.RiskCollection = null;
        transaction.Invoice = null;
        transaction.Property = null;
        transaction.OrderingFirm = null;
        transaction.Firm = null;
        transaction.FirmAddress = null;
        transaction.AgentFirm = null;
        transaction.PrincipalFirm = null;
        transaction.Underwriter = null;
        transaction.Profile = null;
        transaction.ContactProfile = null;
        transaction.ContactFirmAddress = null;
        transaction.ContactBillingFirm = true;
        transaction.Task = null;
        transaction.AllowedClientToEdit = false;
        transaction.Extend = function(){
                convertDate(this);
                extend(this,"Transaction");
                extendEntity(this,"Property");
                extendEntity(this,"Firm");
                extendEntity(this,"Profile");
                extendEntity(this,"Invoice");
                extendCollection(this,"ActivityLogCollection","ActivityLog");
                extendCollection(this,"DocumentFolderCollection","DocumentFolder");
                extendCollection(this,"FlagCollection","Flag");
                extendCollection(this,"InvoiceCollection","Invoice");
                extendCollection(this,"NoteCollection","Note");
                extendCollection(this,"PolicyCollection","Policy");
                extendCollection(this,"PolicyEndorsementCollection","PolicyEndorsement");
                extendCollection(this,"RiskCollection","Risk");
                extendCollection(this,"PolicyHistoryCollection","PolicyHistory");
                this.IsDirty = false;
                this.IsNew = this.TransactionID == 0 || nullableValue(this.TransactionID);
        }
        
        transaction.Update = function(entity){
                var e = entity;
                if(e != null)
                        {
                        this.set("TransactionID",e.TransactionID);
                        this.set("TransactionStatusID",e.TransactionStatusID);
                        this.set("BusinessSourceID",e.BusinessSourceID);
                        this.set("UnderwriterID",e.UnderwriterID);
                        this.set("ContactMethodID",e.ContactMethodID);
                        this.set("FirmAddressUniqueId",e.FirmAddressUniqueId);
                        this.set("ContactFirmUniqueId",e.ContactFirmUniqueId);
                        this.set("ContactProfileUniqueId",e.ContactProfileUniqueId);
                        this.set("ContactFirmAddressUniqueId",e.ContactFirmAddressUniqueId);
                        this.set("ContactFirmContactMethodID",e.ContactFirmContactMethodID);
                        this.set("ContactProfile",e.ContactProfile);
                        this.set("AgentFirmUniqueId",e.AgentFirmUniqueId);
                        this.set("EnquiryLocationID",e.EnquiryLocationID);
                        this.set("PaymentTypeID",e.PaymentTypeID);
                        this.set("RequirementsVerified",e.RequirementsVerified);
                        this.set("ReferenceNumber",e.ReferenceNumber);
                        this.set("CanEditReferredQuote",e.CanEditReferredQuote);
                        this.set("FirmUniqueId",e.FirmUniqueId);
                        this.set("ProfileUniqueId",e.ProfileUniqueId);
                        this.set("IsReinsured",e.IsReinsured);
                        this.set("IsAccessibleExternally",e.IsAccessibleExternally);
                        this.set("CreatedBy",e.CreatedBy);
                        this.set("CreatedByID",e.CreatedByID);
                        this.set("CreatedDate",e.CreatedDate);
                        this.set("ModifiedBy",e.ModifiedBy);
                        this.set("ModifiedByID",e.ModifiedByID);
                        this.set("ModifiedDate",e.ModifiedDate);
                        this.set("AllErrors",e.AllErrors);
                        this.set("IsReadOnly",e.IsReadOnly);
                        this.set("IsNew",e.IsNew);
                        this.IsDirty = e.IsDirty;
                        this.Invoice.Update(e.Invoice);
                        this.Property.Update(e.Property);
                        this.ActivityLogCollection.Update(e.ActivityLogCollection);
                        this.DocumentFolderCollection.Update(e.DocumentFolderCollection);
                        this.FlagCollection.Update(e.FlagCollection);
                        this.InvoiceCollection.Update(e.InvoiceCollection);
                        this.NoteCollection.Update(e.NoteCollection);
                        this.PolicyEndorsementCollection.Update(e.PolicyEndorsementCollection);
                        this.PolicyCollection.Update(e.PolicyCollection);
                }
}

transaction.IsEqual = function(entity){
        var e = entity;
        return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
}

transaction.GetFileContactEmail = function(){
        if(!this.ContactBillingFirm && this.ContactFirmUniqueId)
                {
                if(this.ContactProfile != null)
                        return this.ContactProfile.Email;
                else return String.Empty;
        }
else if(this.ContactEmail)
        {
        return this.ContactEmail;
}
else {
return this.Profile.Email;
}
}

return transaction;
}());
var TransactionAccess = (function() {
        var transactionaccess = {};
        transactionaccess.TransactionAccessID = 0;
        transactionaccess.TransactionID = 0;
        transactionaccess.EmployeeID = 0;
        transactionaccess.ProfileUniqueId = null;
        transactionaccess.AccessedBy = null;
        transactionaccess.AccessedDate =  new Date();
        return transactionaccess;
}());
ActivityTypesEnum = {
        Email: 1,
        Phone: 2,
        Fax: 3,
        Post: 4,
        Inbox: 5
};
ArDocumentTypesEnum = {
        CreditMemo: 1,
        DebitMemo: 2,
        Invoice: 3
};
BusinessSourcesEnum = {
        Online: 1,
        DirectOrder: 2,
        Integration: 3
};
ClaimStatusesEnum = {
        ActiveClaim: 1,
        PreviousClaim: 2,
        NoClaim: 3,
        PolicyLiabilityReleased: 4
};
CorrespondenceTypesEnum = {
        QuickQuoteEmail: 1,
        CoverNoteEmail: 2,
        FinalPolicyEmail: 3,
        BlockInvoiceEmail: 4,
        MigratedFileEmail: 5,
        InboxEmail: 6
};
DeletedReasonsEnum = {
        WrongPolicyType: 1,
        Duplicate: 2,
        InvalidRequest: 3,
        Test: 4,
        Other: 5
};
DocumentTypesEnum = {
        Policy: 1,
        Endorsement: 2,
        CoverNote: 3,
        PolicyAttachment: 4,
        EndorsementAttachment: 5,
        Email: 6,
        EmailAttachment: 7,
        Correspondence: 8,
        Template: 9,
        ProductRequest: 10,
        ClientAttachment: 11,
        Invoice: 12
};
EndorsementStatusesEnum = {
        Outstanding: 1,
        Pending: 2,
        PendingIssue: 3,
        Complete: 4,
        NotTakenUp: 5,
        Cancelled: 6,
        PendingCancellation: 7
};
FoldersEnum = {
        Letters: 1,
        Miscellaneous: 2,
        Planning: 3,
        Policy: 4,
        Searches: 5,
        Titles: 6,
        Reinsurance: 7,
        SentAttachments: 8,
        InboxAttachments: 9,
        ClientAttachment: 10,
        OldPolicyDocs: 11,
        RiskSummary: 12,
        Quote: 13
};
InsuredUsesEnum = {
        ExistingUse: 1,
        Development: 2
};
InvoiceItemTypesEnum = {
        EmptyLine: 0,
        Premium: 1,
        Tax: 2,
        TaxTotal: 4,
        SubTotal: 5,
        GrandTotal: 6,
        PaidTotal: 7,
        Commission: 10,
        IndemnityLimit: 12,
        ReinsuredLimit: 13,
        RetainedAmount: 14,
        Endorsement: 15,
        GrossPremium: 16,
        VAT: 17
};
InvoiceStatusesEnum = {
        Unordered: 1,
        Ordered: 2,
        Cancelled: 3,
        PendingCancellation: 4
};
NoteTypesEnum = {
        UnderwritingNote: 1,
        ReferredReason: 2,
        Other: 3,
        ZeroPremium: 4,
        PolicyCancellation: 5,
        EndorsementCancellation: 6,
        InvoiceCancellation: 7,
        CoverNoteCancellation: 8,
        PremiumOverridden: 9,
        PolicyStatusChange: 10,
        MigratedFileNote: 11,
        Refund: 12,
        Task: 13
};
OverrideReasonsEnum = {
        MatchingCompetitor: 1,
        SplinterPolicy: 2,
        ReplacementCover: 3,
        AdditionalCover: 4,
        CoverForOldBreach: 5,
        RetainExistingCustomer: 6,
        DealWithClaim: 7,
        MinorPolicyAmendment: 8,
        MistakeOnOriginalPolicy: 9,
        Other: 100
};
PartyTypesEnum = {
        Individual: 1,
        Company: 2
};
PaymentMethodsEnum = {
        Cheque: 1,
        BACS: 2,
        WriteOff: 3,
        CreditCard: 4
};
PaymentStatusesEnum = {
        Unpaid: 0,
        Paid: 1,
        PartialPaid: 2,
        Refunded: 3
};
PaymentTransferTypesEnum = {
        Auto: 1,
        Manual: 2
};
PolicyStatusesEnum = {
        Outstanding: 1,
        Pending: 2,
        PendingIssue: 3,
        Complete: 4,
        NotTakenUp: 5,
        Declined: 6,
        Cancelled: 7,
        PendingCancellation: 8
};
PolicyStatusReasonsEnum = {
        PremiumTooHigh: 1,
        CouldNotOffer: 2,
        CoverPlacedElsewhere: 3,
        SelfInsureRisk: 4,
        SPDFellThrough: 5,
        Other: 6
};
PolicyTypesEnum = {
        Standard: 1,
        Bespoke: 2,
        Block: 3
};
PropertyTypesEnum = {
        Residential: 1,
        Commercial: 2,
        MixedUse: 3
};
ReferenceTypesEnum = {
        File: 0,
        Quote: 1,
        Policy: 2,
        Invoice: 3
};
ReinsurersEnum = {
        STGWithAssumptionCertificate: 2,
        STGWithoutAssumptionCertificate: 3,
        Retained: 4,
        Other: 5
};
TaskStatusesEnum = {
        Unassigned: 1,
        Assigned: 2,
        Completed: 3
};
TaskTypesEnum = {
        New: 1,
        Existing: 2,
        Referral: 3
};
TransactionStatusesEnum = {
        Open: 0,
        Closed: 1
};
WriteoffTypesEnum = {
        Charity: 1,
        Shortage: 2,
        Other: 3
};

$.extend(true, Quote, {
    setupHandlers: function () {
        this.FlagCollection.setupHandlers();
        this.PolicyCollection.setupHandlers();
        this.RequirementCollection.setupHandlers();
    },

    isSearchProduct: function (x) {        
            return Enumerable.From(x.Risk.RiskCovers).Any(function (y) {
                return y.IsSearch;
            });
    },

    hasSearchProducts: function () {
        return Enumerable.From(this.PolicyCollection.Items).Any(function (x) {
            return Enumerable.From(x.Risk.RiskCovers).Any(function (y) {
                return y.IsSearch;
            });
        });
    },
    
    hasNonSearchProducts: function () {
        return Enumerable.From(this.PolicyCollection.Items).Any(function (x) {
            return Enumerable.From(x.Risk.RiskCovers).Any(function (y) {
                return !y.IsSearch;
            });
        });
    }
});

$.extend(true, Transaction, {
    setupHandlers: function () {
        var that = this;

        this.ActivityLogCollection.setupHandlers();
        this.DocumentFolderCollection.setupHandlers();
        this.FlagCollection.setupHandlers();
        this.InvoiceCollection.setupHandlers();
        this.NoteCollection.setupHandlers();
        this.PolicyCollection.setupHandlers();

        this.propertyChangeHandler(["PolicyCollection.Items"], this.policyCollectionChangeHandler);
        this.propertyChangeHandler(["InvoiceCollection.Items"], this.invoiceCollectionChangeHandler);

        this.propertyChangeHandler(["BusinessSourceID", "UnderwriterID", "FirmUniqueId", "ProfileUniqueId",
            "ContactBillingFirm", "ContactFirm", "ContactProfileUniqueId", "ContactFirmAddressUniqueId",
            "Property.FullAddress", "Property.CountryID", "Property.PropertyTypeID", "Property.InsuredUseID"], function (e) {
            e.sender.set("minimumDataRequired", e.sender.verifyMinimumDataRequired());
        });

        this.propertyChangeHandler(["Property.FullAddress"], function (e) {
            //policy
            Enumerable.From(e.sender.PolicyCollection.Items).ForEach(function (p) {
                var draft = Enumerable.From(p.DraftCollection.Items).OrderByDescending(function (x) { return x.DraftNumber }).FirstOrDefault();
                if (draft != null) draft.set("UpdateRequired", true);

                //endorsment
                Enumerable.From(p.PolicyEndorsementCollection.Items).ForEach(function (d) {
                    draft = Enumerable.From(d.DraftCollection.Items).OrderByDescending(function (x) { return x.DraftNumber }).FirstOrDefault();
                    if (draft != null) draft.set("UpdateRequired", true);
                });
            });
        });

        this.propertyChangeHandler(["PolicyCollection.Items", "PolicyCollection.Items.PolicyStatusID"], function (e) {
            e.sender.trigger("change", { field: "isDeleteFileAllowed" });
        });

        this.propertyChangeHandler(["InvoiceCollection.Items.InvoiceItemCollection.Items.Amount"], function (e) {
            if ($.inArray(e.items[0].InvoiceItemTypeID.ID, [InvoiceItemTypesEnum.Premium, InvoiceItemTypesEnum.IndemnityLimit]) >= 0) {
                if (e.items[0].PolicyUniqueId && !e.items[0].PolicyEndorsementUniqueId) {    //policy
                    var policy = Enumerable.From(e.sender.PolicyCollection.Items).First(function (x) { return x.UniqueId == e.items[0].PolicyUniqueId });
                    var draft = Enumerable.From(policy.DraftCollection.Items).OrderByDescending(function (x) { return x.DraftNumber }).FirstOrDefault();
                    if (draft != null) draft.set("UpdateRequired", true);

                }
                else if (e.items[0].PolicyUniqueId && e.items[0].PolicyEndorsementUniqueId) {   //endorsement
                    var endorsement = Enumerable.From(e.sender.PolicyCollection.Items).SelectMany(function (x) { return x.PolicyEndorsementCollection.Items }).FirstOrDefault(null, function (x) { return x.UniqueId == e.items[0].PolicyEndorsementUniqueId });
                    if (endorsement) {
                        var draft = Enumerable.From(endorsement.DraftCollection.Items).OrderByDescending(function (x) { return x.DraftNumber }).FirstOrDefault();
                        if (draft != null) draft.set("UpdateRequired", true);
                    }
                }
            }
        });
    },

    isDeleteFileAllowed: function () {
        var outstandingCount = Enumerable.From(this.PolicyCollection.Items)
                                .Where("x => x.PolicyStatusID.ID == PolicyStatusesEnum.Outstanding")
                                .ToArray()
                                .length;

        return outstandingCount == this.PolicyCollection.Items.length && this.TransactionID > 0;
    },
    
    verifyMinimumDataRequired: function () {
        var isInvalid = function () {
            return this.UnderwriterID == 0 || this.BusinessSourceID.ID == 0 || this.Property.CountryID.ID == 0 ||
                this.FirmUniqueId == null || this.FirmUniqueId == "" || this.ProfileUniqueId == null || this.ProfileUniqueId == "" ||
                (!this.ContactBillingFirm && (this.ContactProfileUniqueId == null || this.ContactProfileUniqueId == ""));
        };

        if (this.IsBlockContainer)
            return isInvalid.apply(this);
        else
            return isInvalid.apply(this) || this.Property.FullAddress == null || this.Property.FullAddress == "" || this.Property.PropertyTypeID.ID == 0 || this.Property.InsuredUseID.ID == 0;
    },

    policyCollectionChangeHandler: function (e) {
        InvoiceItemSynchronizer.PolicyCollectionChanged(e);
        ReinsuranceSynchronizer.PolicyCollectionChanged(e);
    },

    invoiceCollectionChangeHandler: function (e) {
        TransactionSynchronizer.InvoiceCollectionChanged(e);
    },

    getCommissionWithheld: function (e) {
        if (typeof (this.Firm) == 'object' && this.Firm.CommissionWithheld)
            return this.Firm.CommissionWithheld.ID;
        return 0;
    },

    minimumDataRequired: true,
    uploadsRetrieveRequired: false
});

$.extend(true, Invoice, {
    setupHandlers: function () {
        this.InvoiceItemCollection.setupHandlers();

        this.propertyChangeHandler(["InvoiceItemCollection.Items", "InvoiceItemCollection.Items.Amount"], function (e) {
            e.sender.set("UpdateRequired", true);
        });
    },

    buildInvoiceHeader: function () {
        var that = this;
        if (!that.CreatedDate) that.set("CreatedDate", new Date());
        that.set("InvoiceHeader", that.InvoiceNumber + " - " + formatDate(that.CreatedDate, "d"));
    },

    buildInvoiceSummary: function () {
        var that = this;
        var summary = "";
        Enumerable.From(that.InvoiceItemCollection.Items).ForEach(function (i) {
            if (i.InvoiceItemTypeID.ID == InvoiceItemTypesEnum.IndemnityLimit && i.IsSelected == true)
                summary = summary + "LOI: " + kendo.toString(i.Amount, "c") + ", ";
        });
        summary = summary.substr(0, summary.length - 2);
        that.set("InvoiceSummary", summary);
    },

    IsInvoiceEditable: function () {
        var that = this;
        return $.inArray(that.InvoiceStatusID.ID, [InvoiceStatusesEnum.Unordered]) >= 0;
    },

    getTotalsForQuickQuote: function () {
        var that = this;
        var items = Enumerable.From(that.InvoiceItemCollection.Items).Where(function (x) {
            return $.inArray(x.InvoiceItemTypeID.ID, [InvoiceItemTypesEnum.GrandTotal, InvoiceItemTypesEnum.SubTotal, InvoiceItemTypesEnum.TaxTotal]) >= 0
        }).ToArray();

        Enumerable.From(items).ForEach(function (x) {
            if (x.InvoiceItemTypeID.ID == InvoiceItemTypesEnum.GrandTotal)
                x.Description = localizedResource.NetPremiumTotalLabel;
        });
        return items;
    },

    getPolicyPremium: function (e) {
        var that = this;
        var premium = Enumerable.From(that.InvoiceItemCollection.Items).First(function (x) {
            return x.PolicyUniqueId == e.UniqueId && !x.PolicyEndorsementUniqueId && x.InvoiceItemTypeID.ID == InvoiceItemTypesEnum.Premium
        });
        return premium ? premium.Amount : 0;
    },
    getPolicyTax: function (e) {
        var that = this;
        var tax = Enumerable.From(that.InvoiceItemCollection.Items).First(function (x) {
            return x.PolicyUniqueId == e.UniqueId && !x.PolicyEndorsementUniqueId && x.InvoiceItemTypeID.ID == InvoiceItemTypesEnum.Tax
        });
        return tax ? tax.Amount : 0;
    },
    hasEndorsements: function () {
        var that = this;
        return Enumerable.From(that.InvoiceItemCollection.Items).Any(function (x) { return x.InvoiceItemTypeID.ID == InvoiceItemTypesEnum.Premium && x.IsSelected && x.PolicyEndorsementUniqueId });
    }
});

$.extend(true, Policy, {
    setupHandlers: function () {
        this.DraftCollection.setupHandlers();
        this.ReturnCollection.setupHandlers();
        this.PremiumCollection.setupHandlers();
        this.PolicyRequirementCollection.setupHandlers();
        this.PolicyEndorsementCollection.setupHandlers();

        this.propertyChangeHandler(["PolicyNumber", "RiskTermID", "CommencementDate", "Clauses.Wording"], function (e) {
            var draft = Enumerable.From(e.sender.DraftCollection.Items).OrderByDescending(function (x) { return x.DraftNumber }).FirstOrDefault();
            if (draft != null) draft.set("UpdateRequired", true);
        });
    },

    verifyFinalizedDraft: function () {
        this.set("HasFinalizedDraft", Enumerable.From(this.DraftCollection.Items).Any(function (x) { return x.IsFinal }));
    },
    IsOrdered: function () {
        return $.inArray(this.PolicyStatusID.ID, [PolicyStatusesEnum.Complete, PolicyStatusesEnum.PendingIssue]) >= 0;
    },
    IsOrderedOrCancelled: function () {
        return $.inArray(this.PolicyStatusID.ID, [PolicyStatusesEnum.Complete, PolicyStatusesEnum.PendingIssue, PolicyStatusesEnum.Cancelled, PolicyStatusesEnum.PendingCancellation]) >= 0;
    },
    IsStatusEditable: function () {
        return !this.IsOrdered() && this.PolicyStatusID.ID != PolicyStatusesEnum.Cancelled && this.PolicyStatusID.ID != PolicyStatusesEnum.PendingCancellation;
    },
    IsPremiumEditable: false
});

$.extend(true, PolicyEndorsement, {
    setupHandlers: function () {
        this.DraftCollection.setupHandlers();

        this.propertyChangeHandler(["FirmUniqueId", "EndorsementNumber", "CommencementDate", "DocumentClause.Wording"], function (e) {
            var draft = Enumerable.From(e.sender.DraftCollection.Items).OrderByDescending(function (x) { return x.DraftNumber }).FirstOrDefault();
            if (draft != null) draft.set("UpdateRequired", true);
        });
    },

    CanDelete: function () {
        return $.inArray(this.EndorsementStatusID.ID, [0, EndorsementStatusesEnum.Outstanding, EndorsementStatusesEnum.Pending, EndorsementStatusesEnum.NotTakenUp]) >= 0;
    },
    IsOrdered: function () {
        return $.inArray(this.EndorsementStatusID.ID, [EndorsementStatusesEnum.Complete, EndorsementStatusesEnum.PendingIssue]) >= 0;
    },
    IsOrderedOrCancelled: function () {
        return $.inArray(this.EndorsementStatusID.ID, [EndorsementStatusesEnum.Complete, EndorsementStatusesEnum.PendingIssue, EndorsementStatusesEnum.Cancelled, EndorsementStatusesEnum.PendingCancellation]) >= 0;
    },    
    IsStatusEditable: function () {
        return !this.IsOrdered() && this.EndorsementStatusID.ID != EndorsementStatusesEnum.Cancelled && this.EndorsementStatusID.ID != EndorsementStatusesEnum.PendingCancellation;
    },
    verifyFinalizedDraft: function () {
        this.set("HasFinalizedDraft", Enumerable.From(this.DraftCollection.Items).Any(function (x) { return x.IsFinal }));
    },
    hasDraftDocument: function () {
        return this.DraftCollection.Items.length > 0;
    },
});

$.extend(true, BlockPremium, {
    setupHandlers: function () {
        this.DetailCollection.setupHandlers();
    },
});

$.extend(true, Draft, {
    setupHandlers: function () {
        this.DocumentCollection.setupHandlers();

        this.propertyChangeHandler(["DraftDocuments", "DraftDocuments.Sequence", "DraftDocuments.IsEditable", "TemplateDocuments", "TemplateDocuments.IsEditable"], this.documentsChangeHandler);

        this.propertyChangeHandler(["EditedDate"], function (e) {
            if (new Date(e.sender.GeneratedDate).getTime() < new Date(e.sender.EditedDate).getTime())
                e.sender.set("UpdateRequired", true);
        });
    },
    documentsChangeHandler: function (e) {
        DraftSynchronizer.DraftDocumentsChanged(e);
    },
});

$.extend(true, DocumentFolder, {
    setupHandlers: function () {
        this.SubfolderCollection.setupHandlers();
        this.DocumentCollection.setupHandlers();
    },
});

$.extend(true, ActivityLog, {
    setupHandlers: function () {
        this.DocumentCollection.setupHandlers();
    },
    getAttachments: function () {
        return Enumerable.From(this.DocumentCollection.Items).Select("x => x.FileName").ToArray().join();
    },
});
/* Create quote validator */
function quoteValidator(container) {
    return container.kendoValidator({
        validateOnBlur: false,
        rules: {
            productrequired: function (input) {
                if (input.is("[productrequired]")) {
                    var products = input.val();
                    return products.length > 0;
                }
                return true;
            },            
            productrequiredcalculator: function (input) {
                if (input.is("[productrequiredcalculator]")) {
                    var products = input.val();
                    return Enumerable.From(products).Any(function (x) { return x.IsSelected });
                }
                return true;
            },
            addressrequiredIE9: function (input) {
                if (input.is("[addressrequiredIE9]")) {
                    var address = input.val();
                    return address.length > 0 && address != localizedResource.TypePostcodeAddressSearchLabel;
                }
                return true;
            },
            answerrequired: function (input) {
                if (input.is("[answerrequired]")) {
                    var quote = input[0].kendoBindingTarget.source.quote;
                    return input.val().length > 0 ? !Enumerable.From(input.val()).Any(function (x) { return x.Answer == null }) : true;
                }
                return true;
            },
            indemnityminimumlimit: function (input) {
                if (input.is("[indemnityminimumlimit]")) {
                    var value = input.val();
                    return (value >= 1000 || !value);
                }
                return true;
            },
            indemnitymaximumlimit: function (input) {
                if (input.is("[indemnitymaximumlimit]")) {
                    var value = input.val();
                    var quote = input[0].kendoBindingTarget.source.quote;
                    if (Enumerable.From(quote.RiskCollection.Items).Any(function (x) { return quote.IndemnityLimit > x.MaxIndemnityLimit })) return false;
                }
                return true;
            },

            exclusiveselection: function (input) {
                if (input.is("[exclusiveselection]")) {
                    var isValid = true;
                    var risk = input[0].kendoBindingTarget.source;
                    var products = Enumerable.From(input.val()).Distinct(function (x) { return x.RiskID });
                    Enumerable.From(risk.RiskCovers).ForEach(function (c) {
                        var otherSelected = Enumerable.From(products).Any(function (p) {
                            return p.RiskID != risk.RiskID && Enumerable.From(p.RiskCovers).Any(function (x) { return x.RiskCoverID == c.RiskCoverID })
                        });
                        if (otherSelected) {
                            isValid = false;
                            return;
                        }
                    });
                    return isValid;
                }
                return true;
            },
            exclusiveselection4enquiry: function (input) {
                if (input.is("[exclusiveselection4enquiry]")) {
                    var isValid = true;
                    var policy = input[0].kendoBindingTarget.source;
                    var policies = Enumerable.From(input.val()).Where(function (x) { return x.Risk != null }).Distinct(function (x) { return x.RiskID });
                    if (policy && policy.Risk) {
                        Enumerable.From(policy.Risk.RiskCovers).ForEach(function (c) {
                            var otherSelected = Enumerable.From(policies).Any(function (p) {
                                return p.RiskID != policy.RiskID && Enumerable.From(p.Risk.RiskCovers).Any(function (x) { return x.RiskCoverID == c.RiskCoverID })
                            });
                            if (otherSelected) {
                                isValid = false;
                                return;
                            }
                        });
                    }
                    return isValid;
                }
                return true;
            },
            exclusiveselection4calculator: function (input) {
                if (input.is("[exclusiveselection4calculator]")) {
                    var isValid = true;
                    /* note: here is multiselect */
                    var risks = input[0].kendoBindingTarget.source.product;
                    var products = Enumerable.From(input.val()).Distinct(function (x) { return x.RiskID });
                    Enumerable.From(risks).ForEach(function (r) {
                        Enumerable.From(r.RiskCovers).ForEach(function (c) {
                            var otherSelected = Enumerable.From(products).Any(function (p) {
                                return p.RiskID != r.RiskID && p.IsSelected && Enumerable.From(p.RiskCovers).Any(function (x) { return x.RiskCoverID == c.RiskCoverID })
                            });
                            if (r.IsSelected && otherSelected) {
                                isValid = false;
                                return;
                            }
                        });
                    });
                    return isValid;
                }
                return true;
            },
            productlimit4calculator: function (input) {
                if (input.is("[productlimit4calculator]")) {
                    var isValid = true;
                    var quote = input[0].kendoBindingTarget.source.quote;
                    return (sessionContext.currentUser && sessionContext.currentUser.IsInternal) ||
                        ((!sessionContext.currentUser || sessionContext.currentUser.IsExternal) && quote.RiskCollection.Items.length <= 5);
                }
                return true;
            },
            postcodeformat: function (input) {
                if (input.is("[postcodeformat]")) {
                    var value = $.trim(input.val());
                    var format = /^[A-Za-z\d\s]*$/.test(value);
                    return ((value.length >= 5 && value.length <= 8) || value.length === 0 || !value) && format;
                }
                return true;
            },
            commencementdaterequired: function (input) {
                if (input.is("[commencementdaterequired]")) {
                    var value = input.val();
                    var quote = input[0].kendoBindingTarget.source.quote;
                    return quote.IsPending() ? !(value === "" || !value) : true; //validate only when the quote is pending order 
                }
                return true;
            },
            searchcommencementdate: function (input) {
                if (input.is("[searchcommencementdate]")) {
                    //validate only when the quote is pending order 
                    var quote = input[0].kendoBindingTarget.source.quote;
                    if (quote.IsPending()) {
                        var hasSearchProducts = false;
                        var hasNonSearchProducts = false;
                        Enumerable.From(quote.PolicyCollection.Items).Any(function (x) {
                            if (quote.isSearchProduct(x)) hasSearchProducts = true;
                            else hasNonSearchProducts = true;
                        });
                        if (hasSearchProducts && !hasNonSearchProducts && dateDiff(new Date(quote.CommencementDate), getCurrentDate(), false) != 0) return false;
                    }
                }
                return true;
            },
            nonsearchcommencementdate: function (input) {
                if (input.is("[nonsearchcommencementdate]")) {
                    //validate only when the quote is pending order 
                    var quote = input[0].kendoBindingTarget.source.quote;
                    if (quote.IsPending()) {
                        var diffDays = dateDiff(new Date(quote.CommencementDate), getCurrentDate());
                        var hasSearchProducts = false;
                        var hasNonSearchProducts = false;
                        Enumerable.From(quote.PolicyCollection.Items).Any(function (x) {
                            if (quote.isSearchProduct(x)) hasSearchProducts = true;
                            else hasNonSearchProducts = true;
                        });
                        if (!hasSearchProducts && hasNonSearchProducts && (diffDays < -30 || diffDays > 7)) return false;
                    }
                }
                return true;
            },
            mixsearchcommencementdate: function (input) {
                if (input.is("[mixsearchcommencementdate]")) {
                    //validate only when the quote is pending order 
                    var quote = input[0].kendoBindingTarget.source.quote;
                    if (quote.IsPending()) {
                        var hasSearchProducts = false;
                        var hasNonSearchProducts = false;
                        Enumerable.From(quote.PolicyCollection.Items).Any(function (x) {
                            if (quote.isSearchProduct(x)) hasSearchProducts = true;
                            else hasNonSearchProducts = true;
                        });
                        if (hasSearchProducts && hasNonSearchProducts && dateDiff(new Date(quote.CommencementDate), getCurrentDate(), false) != 0) return false;
                    }
                }
                return true;
            },            
            commissionlimit: function (input) {
                if (input.is("[commissionlimit]")) {
                    var source = input[0].kendoBindingTarget.source;
                    return source.Commission == 0 || source.Premium > source.Commission;
                }
                return true;
            },
            premiumrequired: function (input) {
                if (input.is("[premiumrequired]")) {
                    var policy = input[0].kendoBindingTarget.source;
                    if (policy.Risk && policy.IndemnityLimit <= policy.Risk.MaxIndemnityLimit && policy.PolicyTypeID.ID == PolicyTypesEnum.Standard)
                        return policy.Premium > 0;
                }
                return true;
            },
            contactfirmrequired: function (input) {
                if (input.is("[contactfirmrequired]")) {
                    var enquiry = input[0].kendoBindingTarget.source.enquiry;
                    if (!enquiry.ContactBillingFirm) { 
                        return (enquiry.ContactFirm && enquiry.ContactFirm.FirmID > 0);
                    }
                }
                return true;
            },
            contactfirmprofilerequired: function (input) {
                if (input.is("[contactfirmprofilerequired]")) {
                    var enquiry = input[0].kendoBindingTarget.source.enquiry;
                    if (!enquiry.ContactBillingFirm) {
                        return (enquiry.ContactProfile && enquiry.ContactProfile.ProfileID > 0);
                    }
                }
                return true;
            },
        },
        messages: {
            contactfirmrequired: localizedResource.FieldRequiredMessage,
            contactfirmprofilerequired: localizedResource.FieldRequiredMessage,
            date: localizedResource.InvalidDateMessage,
            required: localizedResource.FieldRequiredMessage,
            addressrequiredIE9: localizedResource.FieldRequiredMessage,
            productrequired: localizedResource.ProductRequiredMessage,
            productrequiredcalculator: localizedResource.ProductRequiredMessage,
            commencementdaterequired: localizedResource.CommencementDateIsRequiredMessage,
            postcodeformat: localizedResource.PostCodeFormatMessage,
            searchcommencementdate: localizedResource.SearchCommencementDateMessage,
            nonsearchcommencementdate: localizedResource.NonSearchCommencementDateMessage,
            mixsearchcommencementdate: localizedResource.MixSearchCommencementDateMessage,
            indemnityminimumlimit: localizedResource.IndemnityLimitMinimumMessage,
            indemnitymaximumlimit: localizedResource.IndemnityLimitMaximumMessage,
            exclusiveselection: localizedResource.ExclusiveProductSelectionMessage,
            exclusiveselection4enquiry: localizedResource.ExclusiveProductSelectionMessage,
            exclusiveselection4calculator: localizedResource.SameGroupCoverageRiskSelectedMessage,
            productlimit4calculator: localizedResource.NumberOfProductLimitMessage,
            commissionlimit: localizedResource.CommissionLimitMessage,
            premiumrequired: localizedResource.PremiumRequiredMessage
        }
    }).data("kendoValidator");
};

function searchValidator(container) {
    return container.kendoValidator({
        validateOnBlur: false,
        rules: {
            startdate: function (input) {
                if (input.is("[startdate]")) {
                    var value = input.val();
                    var target = input[0].kendoBindingTarget;
                    if (target) {
                        var endDate = input[0].kendoBindingTarget.source.endDate;
                        if (!(endDate === "" || !endDate))
                            return !(value === "" || !value) ? kendo.parseDate(value) <= kendo.parseDate(endDate) : false;
                    }
                }
                return true;
            },
            enddate: function (input) {
                if (input.is("[enddate]")) {
                    var value = input.val();
                    var target = input[0].kendoBindingTarget;
                    if (target) {
                        var startDate = input[0].kendoBindingTarget.source.startDate;
                        if (!(startDate === "" || !startDate))
                            return !(value === "" || !value) ? kendo.parseDate(value) >= kendo.parseDate(startDate) : false;
                    }
                }
                return true;
            },
            createdstartdate: function (input) {
                if (input.is("[createdstartdate]")) {
                    var value = input.val();
                    var target = input[0].kendoBindingTarget;
                    if (target) {
                        var endDate = input[0].kendoBindingTarget.source.criteria.EndDate;
                        if (!(endDate === "" || !endDate))
                            return !(value === "" || !value) ? kendo.parseDate(value) <= kendo.parseDate(endDate) : false;
                    }
                }
                return true;
            },
            createdenddate: function (input) {
                if (input.is("[createdenddate]")) {
                    var value = input.val();
                    var target = input[0].kendoBindingTarget;
                    if (target) {
                        var startDate = input[0].kendoBindingTarget.source.criteria.StartDate;
                        if (!(startDate === "" || !startDate))
                            return !(value === "" || !value) ? kendo.parseDate(value) >= kendo.parseDate(startDate) : false;
                    }
                }
                return true;
            },
            indemnityLimitMinimum: function (input) {
                if (input.is("[indemnityLimitMinimum]")) {
                    var value = input.val();
                    var maxLOI = input[0].kendoBindingTarget.source.criteria.IndemnityLimitMaximum;
                    if (maxLOI > 0)
                        return value >= 0 && value <= maxLOI;
                }
                return true;
            },
            indemnityLimitMaximum: function (input) {
                if (input.is("[indemnityLimitMaximum]")) {
                    var value = input.val();
                    var minLOI = input[0].kendoBindingTarget.source.criteria.IndemnityLimitMinimum;
                    if (minLOI > 0)
                        return value > 0 && value >= minLOI;
                }
                return true;
            },
            riskrequired: function (input) {
                if (input.is("[riskrequired]")) {
                    var value = input.val();
                    if (value != null && value != "")
                        return typeof value === 'object' && value.RiskID != null && value.RiskID > 0;
                }
                return true;
            }
        },
        messages: {
            date: localizedResource.InvalidDateMessage,
            required: localizedResource.FieldRequiredMessage,
            startdate: kendo.format(localizedResource.StartDateErrorMessage, localizedResource.QuoteFromLabel, localizedResource.QuoteToLabel),
            enddate: kendo.format(localizedResource.EndDateErrorMessage, localizedResource.QuoteToLabel, localizedResource.QuoteFromLabel),
            createdstartdate: kendo.format(localizedResource.StartDateErrorMessage, localizedResource.CreatedDateFromLabel, localizedResource.CreatedDateToLabel),
            createdenddate: kendo.format(localizedResource.EndDateErrorMessage, localizedResource.CreatedDateToLabel, localizedResource.CreatedDateFromLabel),
        }
    }).data("kendoValidator");
};

function postCodeValidator(container) {
    return container.kendoValidator({
        validateOnBlur: false,
        rules: {
            postcoderequired: function (input) {
                if (input.is("[postcoderequired]")) {
                    var value = $.trim(input.val());
                    var format = /^[A-Za-z\d\s]*$/.test(value)
                    return ((value.length >= 5 && value.length <= 8) && value.length > 0) && format;
                }
                return true;
            },
        },
        messages: {
            postcoderequired: localizedResource.PostCodeLengthMessage

        }
    }).data("kendoValidator");
};

function policyValidator(container) {
    return container.kendoValidator({
        validateOnBlur: false,
        rules: {
            commencementdaterequired: function (input) {
                if (input.is("[commencementdaterequired]")) {
                    var transaction = input[0].kendoBindingTarget.source.transaction;
                    var policy = input[0].kendoBindingTarget.source.policy;
                    if (Enumerable.From(transaction.Invoice.InvoiceItemCollection.Items).Any(function (x) { return x.IsSelected && x.InvoiceItemTypeID.ID == InvoiceItemTypesEnum.Premium && x.PolicyUniqueId == policy.UniqueId; })) {
                        var value = input.val();
                        return !(value === "" || !value);
                    }
                }
                return true;
            },
            commencementdaterange: function (input) {
                if (input.is("[commencementdaterange]")) {
                    var transaction = input[0].kendoBindingTarget.source.transaction;
                    var policy = input[0].kendoBindingTarget.source.policy;
                    if (policy.PolicyTypeID.ID != PolicyTypesEnum.Bespoke) {
                        if (Enumerable.From(transaction.Invoice.InvoiceItemCollection.Items).Any(function (x) { return x.IsSelected && x.InvoiceItemTypeID.ID == InvoiceItemTypesEnum.Premium && x.PolicyUniqueId == policy.UniqueId; })) {
                            var diffDays = dateDiff(new Date(policy.CommencementDate), getCurrentDate());
                            return diffDays >= -30 && diffDays <= 7;
                        }
                    }
                }
                return true;
            },
            reinsurerrequired: function (input) {
                if (input.is("[reinsurerrequired]")) {
                    var policy = input[0].kendoBindingTarget.source.policy;
                    return !(policy.PolicyTypeID.ID == PolicyTypesEnum.Bespoke && policy.ReinsurerID.ID == 0);
                }
                return true;
            }
        },
        messages: {
            date: localizedResource.InvalidDateMessage,
            required: localizedResource.FieldRequiredMessage,
            commencementdaterequired: localizedResource.CommencementDateIsRequiredMessage,
            reinsurerrequired: localizedResource.PleaseSelectReinsurerMessage,
            commencementdaterange: localizedResource.CommencementDateMessage
        }
    }).data("kendoValidator");
};

function draftValidator(container) {
    return container.kendoValidator({
        validateOnBlur: false,
        rules: {
            finaldraftrequired: function (input) {
                if (input.is("[finaldraftrequired]")) {
                    var isSelected = false;
                    var transaction = input[0].kendoBindingTarget.source.transaction;
                    var product = input[0].kendoBindingTarget.source.product;
                    var productType = input[0].kendoBindingTarget.source.productType;
                    if (productType == ProductTypesEnum.Policy) {
                        isSelected = Enumerable.From(transaction.Invoice.InvoiceItemCollection.Items).Any(function (x) {
                            return x.IsSelected && x.InvoiceItemTypeID.ID == InvoiceItemTypesEnum.Premium && x.PolicyUniqueId == product.UniqueId && !x.PolicyEndorsementUniqueId;
                        });
                    }
                    else if (productType == ProductTypesEnum.Endorsement) {
                        isSelected = Enumerable.From(transaction.Invoice.InvoiceItemCollection.Items).Any(function (x) {
                            return x.IsSelected && x.InvoiceItemTypeID.ID == InvoiceItemTypesEnum.Premium && x.PolicyEndorsementUniqueId == product.UniqueId;
                        });
                    }
                    if (isSelected && product.DraftCollection.Items.length > 1 && !Enumerable.From(product.DraftCollection.Items).Any(function (x) { return x.IsFinal }))
                        return false;
                }
                return true;
            },
        },
        messages: {
            finaldraftrequired: localizedResource.PleaseChooseFinalDraftMessage
        }
    }).data("kendoValidator");
};

function uploadValidator(container) {
    return container.kendoValidator({
        validateOnBlur: false,
        rules: {},
        messages: {
            required: localizedResource.FieldRequiredMessage
        }
    }).data("kendoValidator");
};

function activityLogValidator(container) {
    return container.kendoValidator({
        validateOnBlur: false,
        rules: {
            validemaillist: function (input) {
                if (input.is("[validemaillist]") && $.inArray(input[0].kendoBindingTarget.source.activityLog.ActivityTypeID.ID, [ActivityTypesEnum.Email, ActivityTypesEnum.Inbox]) >= 0) {
                    var value = $.trim(input.val());
                    var emails = value.split(',');
                    var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
                    var valid = true;
                    if (!value) return true;
                    Enumerable.From(emails).FirstOrDefault(null, function (e) {
                        var em = e.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
                        if (!re.test(em)) valid = false;
                    });
                    return valid;
                }
                return true;
            }
        },
        messages: {
            required: localizedResource.FieldRequiredMessage,
            validemaillist: localizedResource.ValidEmailListMessage
        }
    }).data("kendoValidator");
};

function taskValidator(container) {
    return container.kendoValidator({
        validateOnBlur: false,
        rules: {
            checkRequired: function (input) {
                if (input.is("[checkRequired]")) {
                    var isValid = true;
                    if (input[0].kendoBindingTarget.source.selectedTaskTypeID == 2 && input[0].kendoBindingTarget.source.attachmentsCount == 0)
                        isValid = input[0].kendoBindingTarget.source.createTask;
                    return isValid;
                }
                return true;
            }
        },
        messages: {
            required: localizedResource.FieldRequiredMessage
        }
    }).data("kendoValidator");
};

function generalInfoValidator(container) {
    return container.kendoValidator({
        validateOnBlur: false,
        rules: {
            postcodeformat: function (input) {
                if (input.is("[postcodeformat]")) {
                    var value = $.trim(input.val());
                    var transaction = input[0].kendoBindingTarget.source.transaction;
                    var format = /^[A-Za-z\d\s]*$/.test(value);
                    return (((value.length >= 5 && value.length <= 8) || value.length === 0 || !value) && format) || transaction.IsForeignContainer;
                }
                return true;
            },
            contactfirmrequired: function (input) {
                if (input.is("[contactfirmrequired]")) {
                    var transaction = input[0].kendoBindingTarget.source.transaction;
                    if (!transaction.ContactBillingFirm) {
                        return (transaction.ContactFirm && transaction.ContactFirm.FirmID > 0);
                    }                    
                }
                return true;
            },
            contactfirmprofilerequired: function (input) {
                if (input.is("[contactfirmprofilerequired]")) {
                    var transaction = input[0].kendoBindingTarget.source.transaction;
                    if (!transaction.ContactBillingFirm) {
                        return (transaction.ContactProfile && transaction.ContactProfile.ProfileID > 0);
                    }
                }
                return true;
            },
            contactfirmaddressrequired: function (input) {
                if (input.is("[contactfirmaddressrequired]")) {
                    var transaction = input[0].kendoBindingTarget.source.transaction;
                    if (!transaction.ContactBillingFirm) {
                        return !(transaction.ContactFirmAddress === '' || !transaction.ContactFirmAddress);
                    }
                }
                return true;
            },
        },
        messages: {
            contactfirmrequired: localizedResource.FieldRequiredMessage,
            contactfirmprofilerequired: localizedResource.FieldRequiredMessage,
            contactfirmaddressrequired: localizedResource.FieldRequiredMessage,
            required: localizedResource.FieldRequiredMessage,
            postcodeformat: localizedResource.PostCodeFormatMessage,
        }
    }).data("kendoValidator");
};

function invoiceValidator(container) {
    return container.kendoValidator({
        validateOnBlur: false,
        rules: {
            productrequired: function (input) {
                if (input.is("[productrequired]")) {
                    var products = input.val();
                    return Enumerable.From(products).Any(function (x) { return x.IsSelected });
                }
                return true;
            },
            premiumrequired: function (input) {
                if (input.is("[premiumrequired]")) {
                    var value = $.trim(input.val());
                    if (input[0].kendoBindingTarget.source.IsSelected) return parseFloat(value) > 0;
                }
                return true;
            },
            indemnitylimitrequired: function (input) {
                if (input.is("[indemnitylimitrequired]")) {
                    var value = $.trim(input.val());
                    if (input[0].kendoBindingTarget.source.IsSelected) return parseFloat(value) >= 1000;
                }
                return true;
            },
            indemnitylimitamended: function (input) {
                if (input.is("[indemnitylimitamended]")) {
                    var value = $.trim(input.val());
                    //if (input[0].kendoBindingTarget.source.IsSelected) return parseFloat(value) >= 1000;
                    return true;
                }
                return true;
            },
            totalreinsuredamountvalidate: function (input) {
                if (input.is("[totalreinsuredamountvalidate]")) {
                    var policy = input[0].kendoBindingTarget.source.Policy;
                    var policyEndorsement = input[0].kendoBindingTarget.source.PolicyEndorsement;
                    if (policyEndorsement && policyEndorsement.Endorsement.EndorsementTypeID.ID == EndorsementTypesEnum.DecreaseInLimitOfIndemnity) {
                        var orderedReinsuredAmount = 0, invoiceReinsuredAmount = 0;
                        orderedReinsuredAmount = Enumerable.From(invoiceViewModel.transaction.InvoiceCollection.Items)
                            .Where(function (x) { return x.InvoiceStatusID.ID == InvoiceStatusesEnum.Ordered }).SelectMany(function (i) { return i.ReinsuranceCollection.Items })
                            .Where(function (reinsurance) { return reinsurance.PolicyUniqueId == policy.UniqueId }).Sum(function (reinsurance) { return reinsurance.ReinsuredAmount });
                        //invoiceReinsuredAmount = Enumerable.From(invoiceViewModel.invoice.InvoiceItemCollection.Items)
                        //    .Where(function (ii) { return ii.PolicyUniqueId == policy.UniqueId && ii.InvoiceItemTypeID.ID == InvoiceItemTypesEnum.ReinsuredLimit })
                        //    .Sum(function (ii) { return ii.Amount });
                        invoiceReinsuredAmount = Enumerable.From(invoiceViewModel.invoice.ReinsuranceCollection.Items)
                            .Where(function (r) { return r.PolicyUniqueId == policy.UniqueId }).Sum(function (r) { return r.ReinsuredAmount });
                        return (orderedReinsuredAmount + invoiceReinsuredAmount) >= 0;
                    }
                }
                return true;
            },
            totalindemnitylimitvalidate: function (input) {
                if (input.is("[totalindemnitylimitvalidate]")) {
                    var policy = input[0].kendoBindingTarget.source.Policy;
                    var policyEndorsement = input[0].kendoBindingTarget.source.PolicyEndorsement;
                    if (policyEndorsement && policyEndorsement.Endorsement.EndorsementTypeID.ID == EndorsementTypesEnum.DecreaseInLimitOfIndemnity) {
                        if (input[0].kendoBindingTarget.source.IsSelected) {
                            var orderedLOIAmount = 0, invoiceLOIAmount = 0;
                            orderedLOIAmount = Enumerable.From(invoiceViewModel.transaction.InvoiceCollection.Items)
                                .Where(function (x) { return x.InvoiceStatusID.ID == InvoiceStatusesEnum.Ordered }).SelectMany(function (i) { return i.InvoiceItemCollection.Items })
                                .Where(function (invoiceitem) { return invoiceitem.IsSelected && invoiceitem.PolicyUniqueId == policy.UniqueId && invoiceitem.InvoiceItemTypeID.ID == InvoiceItemTypesEnum.IndemnityLimit }).Sum(function (invoiceitem) { return invoiceitem.Amount });
                            //invoiceReinsuredAmount = Enumerable.From(invoiceViewModel.invoice.InvoiceItemCollection.Items)
                            //    .Where(function (ii) { return ii.PolicyUniqueId == policy.UniqueId && ii.InvoiceItemTypeID.ID == InvoiceItemTypesEnum.ReinsuredLimit })
                            //    .Sum(function (ii) { return ii.Amount });
                            invoiceLOIAmount = Enumerable.From(invoiceViewModel.invoice.InvoiceItemCollection.Items)
                                .Where(function (ii) { return ii.IsSelected && ii.PolicyUniqueId == policy.UniqueId && ii.InvoiceItemTypeID.ID == InvoiceItemTypesEnum.IndemnityLimit }).Sum(function (ii) { return ii.Amount });
                            return (orderedLOIAmount + invoiceLOIAmount) >= 0;
                        }
                    }
                }
                return true;
            },
            reinsuredlimitvalidation: function (input) {
                if (input.is("[reinsuredlimitvalidation]")) {
                    var invoiceitem = input[0].kendoBindingTarget.source;
                    if (invoiceitem.IsSelected && invoiceitem.IndemnityLimit) {
                        return invoiceitem.ReinsuredLimit.Amount <= invoiceitem.IndemnityLimit.Amount;
                    }
                }
                return true;
            },
            reinsuredlimitrequired: function (input) {
                if (input.is("[reinsuredlimitrequired]")) {
                    var invoiceitem = input[0].kendoBindingTarget.source;
                    if (invoiceitem.IsSelected && $.inArray(invoiceitem.Reinsurance.ReinsurerID.ID, [ReinsurersEnum.Other, ReinsurersEnum.STGWithAssumptionCertificate, ReinsurersEnum.STGWithoutAssumptionCertificate]) >= 0) {
                        return !(invoiceitem.ReinsuredLimit.Amount <= 0);
                    }
                }
                return true;
            },
            reinsurerrequired: function (input) {
                if (input.is("[reinsurerrequired]")) {
                    var invoiceitem = input[0].kendoBindingTarget.source;
                    if (invoiceViewModel.invoice.InvoiceStatusID.ID == InvoiceStatusesEnum.Unordered && invoiceitem.IsSelected) {
                        return (input.val() != 0);
                    }
                }
                return true;
            },
            reinsurernamerequired: function (input) {
                if (input.is("[reinsurernamerequired]")) {
                    var invoiceitem = input[0].kendoBindingTarget.source;
                    if (invoiceitem.IsSelected && invoiceitem.Reinsurance.ReinsurerID.ID == ReinsurersEnum.Other) {
                        return (input.val().trim());
                    }
                }
                return true;
            },
            commissionpaidtorequired: function (input) {
                if (input.is("[commissionpaidtorequired]")) {                    
                    var invoiceItem = input[0].kendoBindingTarget.source;
                    var premiumItem = invoiceItem.Premium;
                    if (premiumItem != null && premiumItem.IsSelected && invoiceItem.Commission.Amount > 0)
                        return invoiceItem.Commission.PaidToFirmUniqueId != "" && invoiceItem.Commission.PaidToFirmUniqueId != null
                }
                return true;
            },
            commissionlimit: function (input) {
                if (input.is("[commissionlimit]")) {
                    var invoiceitem = input[0].kendoBindingTarget.source;
                    if (invoiceitem.IsSelected)
                        return invoiceitem.Commission.Amount == 0 || invoiceitem.Premium.Amount > invoiceitem.Commission.Amount
                }
                return true;
            },
            validatetaxrate: function (input) {
                if (input.is("[validatetaxrate]")) {
                    if (input[0].kendoBindingTarget.source.IsSelected && invoiceViewModel.invoice.InvoiceStatusID.ID == InvoiceStatusesEnum.Unordered)
                        return Enumerable.From(invoiceViewModel.invoice.PremiumItems).Where("x => x.IsSelected").Distinct("x => x.IPT.Multiplier").Count() == 1;
                }
                return true;
            },
            validatevatrate: function (input) {
                if (input.is("[validatevatrate]")) {
                    if (input[0].kendoBindingTarget.source.IsSelected && invoiceViewModel.invoice.InvoiceStatusID.ID == InvoiceStatusesEnum.Unordered) {
                        var vatItems = Enumerable.From(invoiceViewModel.invoice.PremiumItems).Where("x => x.IsSelected && x.VAT != null");
                        if (Enumerable.From(vatItems).ToArray().length > 0)
                            return Enumerable.From(vatItems).Distinct("x => x.VAT.Multiplier").Count() <= 1;
                        else
                            return true;                        
                    }                        
                }
                return true;
            },
            commencementdaterequired: function (input) {
                if (input.is("[commencementdaterequired]")) {
                    var policy = input[0].kendoBindingTarget.source.Policy;
                    var isPolicySelected = input[0].kendoBindingTarget.source.IsSelected;
                    if (isPolicySelected) return policy.CommencementDate != null;
                }
                return true;
            },
            commencementdaterange: function (input) {
                if (input.is("[commencementdaterange]")) {
                    var policy = input[0].kendoBindingTarget.source.Policy;
                    var isPolicySelected = input[0].kendoBindingTarget.source.IsSelected;
                    if (policy.PolicyTypeID.ID != PolicyTypesEnum.Bespoke) {
                        var diffDays = dateDiff(new Date(policy.CommencementDate), getCurrentDate());
                        if (isPolicySelected) return diffDays >= -30 && diffDays <= 7;
                    }
                }
                return true;
            },
            commencementdatenotprior: function (input) {
                if (input.is("[commencementdatenotprior]")) {
                    var endorsement = input[0].kendoBindingTarget.source.PolicyEndorsement;
                    var isEndorsementSelected = input[0].kendoBindingTarget.source.IsSelected;
                    if (isEndorsementSelected && $.inArray(endorsement.EndorsementStatusID.ID, [EndorsementStatusesEnum.Complete, EndorsementStatusesEnum.PendingIssue, EndorsementStatusesEnum.Cancelled]) < 0) {
                        if (dateDiff(new Date(endorsement.CommencementDate), new Date(endorsement.PolicyCommencementDate), false) < 0)
                            return false;
                    };
                }
                return true;
            },
            singleinvoicefirmrequired: function (input) {
                if (input.is("[singleinvoicefirmrequired]")) {
                    var products = input[0].kendoBindingTarget.source.parent();
                    var count = Enumerable.From(products).Where(function (x) { return x.IsSelected }).Distinct(function (x) { return x.FirmUniqueId }).Count()
                    return Enumerable.From(products).Where(function (x) { return x.IsSelected }).Distinct(function (x) { return x.FirmUniqueId }).Count() == 1;
                }
                return true;
            },
            policytemplaterequired: function (input) {
                if (input.is("[policytemplaterequired]")) {
                    var selected = input[0].kendoBindingTarget.source.IsSelected;
                    var policy = input[0].kendoBindingTarget.source.Policy;
                    if (selected && policy.IsMigrated && (policy.DraftCollection.Items.length == 0 || Enumerable.From(policy.DraftCollection.Items).Any(function (x) { return x.DraftTemplates.length == 0 })))
                        return false;
                }
                return true;
            }
        },
        messages: {
            required: localizedResource.FieldRequiredMessage,
            productrequired: localizedResource.InvoiceProductRequiredMessage,
            indemnitylimitrequired: localizedResource.IndemnityLimitMinimumMessage,
            indemnitylimitamended: localizedResource.IndemnityLimitRequiredMessage,
            reinsuredlimitvalidation: localizedResource.ReinsuredNotGreaterThanIndemnityLimitMessage,
            reinsuredlimitrequired: localizedResource.FieldRequiredMessage,
            reinsurerrequired: localizedResource.FieldRequiredMessage,
            reinsurernamerequired: localizedResource.FieldRequiredMessage,
            totalreinsuredamountvalidate: localizedResource.LargeReinsuranceAmountDecreaseMessage,
            totalindemnitylimitvalidate: localizedResource.LargeLOIDecreaseMessage,
            premiumrequired: localizedResource.PremiumRequiredMessage,
            commissionlimit: localizedResource.CommissionLimitMessage,
            commencementdaterequired: localizedResource.CommencementDateIsRequiredMessage,
            commencementdaterange: localizedResource.CommencementDateMessage,
            commencementdatenotprior: localizedResource.PolicyEndorsementCommencementDateValidationMessage,
            validatetaxrate: localizedResource.TaxRateChangeMessage,
            validatevatrate: localizedResource.VATRateChangeMessage,
            singleinvoicefirmrequired: localizedResource.SingleInvoiceFirmRequiredMessage,
            policytemplaterequired: localizedResource.PolicyWithoutTemplateMessage
        }
    }).data("kendoValidator");
};

function policyEndorsementValidator(container) {
    return container.kendoValidator({
        validateOnBlur: false,
        rules: {
            commencementdaterequired: function (input) {
                if (input.is("[commencementdaterequired]")) {
                    var value = input.val();
                    var endorsement = input[0].kendoBindingTarget.source.currentEndorsement;
                    if ($.inArray(endorsement.EndorsementStatusID.ID, [EndorsementStatusesEnum.Complete, EndorsementStatusesEnum.PendingIssue, EndorsementStatusesEnum.Cancelled]) < 0) {
                        return !(value === "" || !value);
                    }
                }
                return true;
            },
            commencementdatenotprior: function (input) {
                if (input.is("[commencementdatenotprior]")) {
                    var transaction = input[0].kendoBindingTarget.source.transaction;
                    var endorsement = input[0].kendoBindingTarget.source.currentEndorsement;
                    if (Enumerable.From(transaction.InvoiceItemCollection.Items).Any(function (x) { return x.IsSelected && x.InvoiceItemTypeID.ID == InvoiceItemTypesEnum.Premium && x.PolicyEndorsementUniqueId == endorsement.UniqueId; })) {
                        if ($.inArray(endorsement.EndorsementStatusID.ID, [EndorsementStatusesEnum.Complete, EndorsementStatusesEnum.PendingIssue, EndorsementStatusesEnum.Cancelled]) < 0) {
                            if (dateDiff(new Date(endorsement.CommencementDate), new Date(endorsement.PolicyCommencementDate), false) < 0)
                                return false;
                        };
                    }                    
                }
                return true;
            },
            contactfirmrequired: function (input) {
                if (input.is("[contactfirmrequired]")) {
                    var endorsement = input[0].kendoBindingTarget.source.currentEndorsement;
                    if (!endorsement.ContactBillingFirm) { 
                        return (endorsement.ContactFirm && endorsement.ContactFirm.FirmID > 0);
                    }
                }
                return true;
            },
            contactfirmprofilerequired: function (input) {
                if (input.is("[contactfirmprofilerequired]")) {
                    var endorsement = input[0].kendoBindingTarget.source.currentEndorsement;
                    if (!endorsement.ContactBillingFirm) {
                        return (endorsement.ContactProfile && endorsement.ContactProfile.ProfileID > 0);
                    }
                }
                return true;
            },
            contactfirmaddressrequired: function (input) {
                if (input.is("[contactfirmaddressrequired]")) {
                    var endorsement = input[0].kendoBindingTarget.source.currentEndorsement;
                    if (!endorsement.ContactBillingFirm) {
                        return !(endorsement.ContactFirmAddress === '' || !endorsement.ContactFirmAddress);
                    }
                }
                return true;
            },
        },
        messages: {
            contactfirmrequired: localizedResource.FieldRequiredMessage,
            contactfirmprofilerequired: localizedResource.FieldRequiredMessage,
            contactfirmaddressrequired: localizedResource.FieldRequiredMessage,
            date: localizedResource.InvalidDateMessage,
            required: localizedResource.FieldRequiredMessage,
            commencementdatenotprior: localizedResource.PolicyEndorsementCommencementDateValidationMessage
        }
    }).data("kendoValidator");
};

function noteValidator(container) {
    return container.kendoValidator({
        validateOnBlur: false,
        rules: {},
        messages: {
            required: localizedResource.FieldRequiredMessage
        }
    }).data("kendoValidator");
};

function premiumValidator(container) {
    return container.kendoValidator({
        validateOnBlur: false,
        rules: {},
        messages: {
            required: localizedResource.FieldRequiredMessage
        }
    }).data("kendoValidator");
};

function blockImportValidator(container) {
    return container.kendoValidator({
        validateOnBlur: false,
        rules: {
            importerrorcleared: function (input) {
                if (input.is("[importerrorcleared]")) {
                    var values = input.val();
                    return values == null || values.length == 0;
                }
                return true;
            }
        },
        messages: {
            required: localizedResource.FieldRequiredMessage,
            errorcleard: localizedResource.BlockImportErrorClearMessage
        }
    }).data("kendoValidator");
};

function commissionValidator(container) {
    return container.kendoValidator({
        validateOnBlur: false,
        rules: {
            propertytypesrequired: function (input) {
                if (input.is("[propertytypesrequired]")) {
                    var values = input.val();
                    return values != null && values !== "" && values.length > 0;
                }
                return true;
            },
            commissionrequired: function (input) {
                if (input.is("[commissionrequired]")) {
                    var value = input.val();
                    var commission = input[0].kendoBindingTarget.source;
                    return commission.UsePremiumRange ? true : (commission.Amount > 0 || commission.Percentage > 0);
                }
                return true;
            },
            rangecommissionrequired: function (input) {
                if (input.is("[rangecommissionrequired]")) {
                    var commission = input.val();
                    var premium = input[0].kendoBindingTarget.source;
                    return commission.UsePremiumRange ? (premium.Amount > 0 || premium.Percentage > 0) : true;
                }
                return true;
            },
            commissionduplicated: function (input) {
                if (input.is("[commissionduplicated]")) {
                    var values = input.val();
                    var commission = input[0].kendoBindingTarget.source.blockCommission;
                    var commissions = input[0].kendoBindingTarget.source.policy.CommissionCollection.Items;
                    var newCommission = Enumerable.From(commissions)
                        .Where(function (x) { return (!x.IsNew && x.CommissionID != commission.CommissionID) || (x.UniqueId != commission.UniqueId) })
                        .FirstOrDefault(null, function (x) {
                            if (!x.IneffectiveDate && x.PropertyTypes && values) {
                                for (var i = 0; i < values.length; i++) {
                                    if (Enumerable.From(x.PropertyTypes).Any(function (t) { return t.ID == values[i].ID }) && x.PaidToFirmUniqueId == commission.PaidToFirmUniqueId &&
                                        (commission.PaidToFranchiseeUniqueId == null || x.PaidToFranchiseeUniqueId == commission.PaidToFranchiseeUniqueId))
                                        return true;

                                }
                                return false;
                            }
                            else return false;
                        });
                    return newCommission == null;
                }
                return true;
            },
            commissionperiodoverlapped: function (input) {
                if (input.is("[commissionperiodoverlapped]")) {
                    var value = input.val();
                    var commission = input[0].kendoBindingTarget.source.blockCommission;
                    var commissions = input[0].kendoBindingTarget.source.policy.CommissionCollection.Items;
                    var expiredCommission = Enumerable.From(commissions)
                        .Where(function (x) { return (!x.IsNew && x.CommissionID != commission.CommissionID) || (x.UniqueId != commission.UniqueId) })
                        .FirstOrDefault(null, function (x) {
                            if (x.IneffectiveDate && x.PropertyTypes && commission.PropertyTypes) {
                                for (var i = 0; i < commission.PropertyTypes.length; i++) {
                                    if (Enumerable.From(x.PropertyTypes).Any(function (t) { return t.ID == commission.PropertyTypes[i].ID }) && x.PaidToFirmUniqueId == commission.PaidToFirmUniqueId &&
                                        (commission.PaidToFranchiseeUniqueId == null || x.PaidToFranchiseeUniqueId == commission.PaidToFranchiseeUniqueId))
                                        return true;
                                }
                                return false;
                            }
                            else return false;
                        });
                    return expiredCommission != null ? expiredCommission.IneffectiveDate <= kendo.parseDate(value) : true;
                }
                return true;
            }
        },
        messages: {
            commissionrequired: localizedResource.CommissionValueRequiredMessage,
            rangecommissionrequired: localizedResource.CommissionValueRequiredMessage,
            propertytypesrequired: localizedResource.PropertyTypesRequiredMessage,
            commissionduplicated: localizedResource.BlockCommissionDuplicatedMessage,
            commissionperiodoverlapped: localizedResource.CommissionPeriodOverlappedMessage,
        }
    }).data("kendoValidator");
};

function premiumOverrideValidator(container) {
    return container.kendoValidator({
        validateOnBlur: false,
        rules: {
            overridereasonrequired: function (input) {
                if (input.is("[overridereasonrequired]")) {
                    var overrideReasons = input[0].kendoBindingTarget.source.OverrideReasons;
                    var reasonGroup = Enumerable.From(overrideReasons).GroupBy("o => o.selectedOverrideReasonID").ToArray();
                    if (reasonGroup.length > 1)
                        var reason = Enumerable.From(overrideReasons).GroupBy("o => o.selectedOverrideReasonID").Where("og => og.Count() == 1").Select("x => x.source[0]").FirstOrDefault();
                    else
                        var reason = Enumerable.From(overrideReasons).Where(function (r) { return r.selectedOverrideReasonID > 0 }).FirstOrDefault();

                    if (reason === undefined || reason.OverrideReasonID == 0) return false;
                    return reason.Description.trim() != "";
                }
                return true;
            },
            overrideamountrequired: function (input) {
                if (input.is("[overrideamountrequired]")) {
                    var overridePremium = input.val();
                    var currentPremium = input[0].kendoBindingTarget.source.Amount;

                    return (overridePremium == 0 && currentPremium == 0) || (overridePremium != currentPremium);
                }
                return true;
            },
        },
        messages: {}
    }).data("kendoValidator");
};


function policyStatusChangeValidator(container) {
    return container.kendoValidator({
        validateOnBlur: false,
        rules: {
            policystatusreasonrequired: function (input) {
                if (input.is("[policystatusreasonrequired]")) {
                    var value = input[0].kendoBindingTarget.source.selectedReasonID;
                    if (value == 0) return false;
                    var statusReasons = input[0].kendoBindingTarget.source.policyStatusReasons;
                    var statusReasonID = Enumerable.From(statusReasons).Where(function (x) { return x.ID == value }).First()
                    return statusReasonID != null && statusReasonID.ID != 0 && statusReasonID.Name != "";
                }
                return true;
            },
        },
        messages: {
            policystatusreasonrequired: localizedResource.PleaseSelectPolicyStatusReasonLabel,
        }
    }).data("kendoValidator");
};

function policyRequirementValidator(container) {
    return container.kendoValidator({
        validateOnBlur: false,
        rules: {
            validateoutstandingrequirements: function (input) {
                if (input.is("[validateoutstandingrequirements]")) {
                    var requirement = input[0].kendoBindingTarget.source;
                    return !(requirement.RequirementTypeID.ID == RequirementTypesEnum.Requirement && (requirement.RequirementStatusID.ID == RequirementStatusesEnum.Outstanding || requirement.RequirementStatusID.ID == 0));
                }
            }
        },
        messages: {
            validateoutstandingrequirements: localizedResource.OutstandingPolicyRequirementsMessage
        }
    }).data("kendoValidator");
};


var CommissionRuleCriteria = (function() {
        var commissionrulecriteria = {};
        commissionrulecriteria.Rules = null;
        commissionrulecriteria.EffectiveDate =  new Date();
        commissionrulecriteria.FirmUniqueId = null;
        commissionrulecriteria.Policy = null;
        commissionrulecriteria.Invoice = null;
        commissionrulecriteria.PolicyEndorsement = null;
        commissionrulecriteria.IsCommissionWithheld = false;
        commissionrulecriteria.FirmDiscountID = 0;
        commissionrulecriteria.AgentFirmID = 0;
        commissionrulecriteria.IsIntegration = false;
        return commissionrulecriteria;
}());
var Firm = (function() {
        var firm = {};
        firm.FirmID = 0;
        firm.UniqueId = "210e2ac7-887d-4861-be90-b9443160d14f";
        firm.FirmTypeID = { ID: 0, Value: "" };
        firm.FirmStatusID = { ID: 1, Value: "" };
        firm.PaymentTypeID = { ID: 1, Value: "" };
        firm.AccountingEmail = null;
        firm.Name = null;
        firm.CommissionWithheld = false;
        firm.TestAccount = false;
        firm.Website = null;
        firm.CustomerId = null;
        firm.HasFranchisees = false;
        firm.FirmDiscountID = { ID: 0, Value: "" };
        firm.ApplyFirmDiscount = false;
        firm.IntroducerUniqueId = null;
        firm.PrincipalFirmUniqueId = null;
        firm.ClientId = null;
        firm.CreatedDate =  new Date();
        firm.ContactMethodID = { ID: 1, Value: "" };
        firm.AddressCollection = {};
        firm.ProfileCollection = {};
        firm.CommissionCollection = {};
        firm.Introducer = null;
        firm.PrincipalFirm = null;
        firm.AgentFirm = null;
        firm.FirmTypeChanged = false;
        firm.WhiteLabel = 0;
        firm.Extend = function(){
                extend(this,"Firm");
                extendCollection(this,"AddressCollection","FirmAddress");
                extendCollection(this,"ProfileCollection","Profile");
                extendCollection(this,"CommissionCollection","FirmCommission");
                this.IsDirty = false;
                this.IsNew = this.FirmID == 0;
        }
        
        firm.Update = function(entity){
                var e = entity;
                this.set("UniqueId",e.UniqueId);
                this.set("FirmID",e.FirmID);
                this.set("FirmTypeID",e.FirmTypeID);
                this.set("FirmStatusID",e.FirmStatusID);
                this.set("PaymentTypeID",e.PaymentTypeID);
                this.set("Name",e.Name);
                this.set("CustomerId",e.CustomerId);
                this.set("AccountingEmail",e.AccountingEmail);
                this.set("CommissionWithheld",e.CommissionWithheld);
                this.set("FirmDiscountID",e.FirmDiscountID);
                this.set("ApplyFirmDiscount",e.ApplyFirmDiscount);
                this.set("IntroducerUniqueId",e.IntroducerUniqueId);
                this.set("PrincipalFirmUniqueId",e.PrincipalFirmUniqueId);
                this.set("ContactMethodID",e.ContactMethodID);
                this.set("HasFranchisees",e.HasFranchisees);
                this.set("TestAccount",e.TestAccount);
                this.set("WebSite",e.Website);
                this.set("AllErrors",e.AllErrors);
                this.set("IsReadOnly",e.IsReadOnly);
                this.set("IsNew",e.IsNew);
                this.IsDirty = e.IsDirty;
                this.AddressCollection.Update(e.AddressCollection);
                this.ProfileCollection.Update(e.ProfileCollection);
                this.CommissionCollection.Update(e.CommissionCollection);
        }
        
        firm.IsEqual = function(entity){
                var e = entity;
                return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
        }
        
        return firm;
}());
var FirmAddress = (function() {
        var firmaddress = {};
        firmaddress.FirmAddressID = 0;
        firmaddress.UniqueId = "28c5fc46-9949-450b-99d1-54c656235c48";
        firmaddress.FirmUniqueId = null;
        firmaddress.Name = null;
        firmaddress.Postcode = "";
        firmaddress.FullAddress = null;
        firmaddress.CountryID = { ID: 0, Value: "" };
        firmaddress.Phone = null;
        firmaddress.Fax = null;
        firmaddress.Email = null;
        firmaddress.FranchiseeName = null;
        firmaddress.ClientOfficeID = null;
        firmaddress.Extend = function(){
                extend(this,"FirmAddress","Address");
                this.IsDirty = false;
                this.IsNew = this.FirmAddressID == 0;
        }
        
        firmaddress.Update = function(entity){
                var e = entity;
                this.set("UniqueId",e.UniqueId);
                this.set("FirmAddressID",e.FirmAddressID);
                this.set("FirmUniqueId",e.FirmUniqueId);
                this.set("CountryID",e.CountryID);
                this.set("Postcode",e.Postcode);
                this.set("Phone",e.Phone);
                this.set("Fax",e.Fax);
                this.set("Email",e.Email);
                this.set("Name",e.Name);
                this.set("FranchiseeName",e.FranchiseeName);
                this.set("FullAddress",e.FullAddress);
                this.set("ClientOfficeID",e.ClientOfficeID);
                this.set("IsNew",e.IsNew);
                this.IsDirty = e.IsDirty;
        }
        
        firmaddress.IsEqual = function(entity){
                var e = entity;
                return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
        }
        
        return firmaddress;
}());
var FirmBasic = (function() {
        var firmbasic = {};
        firmbasic.Name = null;
        firmbasic.Address = null;
        return firmbasic;
}());
var FirmCommission = (function() {
        var firmcommission = {};
        firmcommission.CommissionID = 0;
        firmcommission.FirmUniqueId = null;
        firmcommission.PaidToFirmUniqueId = null;
        firmcommission.PaidToFranchiseeId = null;
        firmcommission.Name = null;
        firmcommission.Amount = null;
        firmcommission.Percentage = null;
        firmcommission.EffectiveDate =  new Date();
        firmcommission.IneffectiveDate = null;
        firmcommission.PaidToFirmName = null;
        firmcommission.PaidToFranchiseeName = null;
        firmcommission.IsDiscountCommission = false;
        firmcommission.Description = "";
        firmcommission.Rules = null;
        firmcommission.PolicyTypes = null;
        firmcommission.Extend = function(){
                convertDate(this);
                extend(this,"FirmCommission");
                this.IsDirty = false;
                this.IsNew = this.CommissionID == 0;
        }
        
        firmcommission.Update = function(entity){
                var e = entity;
                this.set("CommissionID",e.CommissionID);
                this.set("FirmUniqueId",e.FirmUniqueId);
                this.set("PaidToFirmUniqueId",e.PaidToFirmUniqueId);
                this.set("PaidToFranchiseeId",e.PaidToFranchiseeId);
                this.set("Name",e.Name);
                this.set("Amount",e.Amount);
                this.set("Percentage",e.Percentage);
                this.set("Description",e.Description);
                this.set("EffectiveDate",e.EffectiveDate);
                this.set("IneffectiveDate",e.IneffectiveDate);
                this.set("PaidToFirmName",e.PaidToFirmName);
                this.set("PaidToFranchiseeName",e.PaidToFranchiseeName);
                this.set("IsDiscountCommission",e.IsDiscountCommission);
                this.set("IsNew",e.IsNew);
                this.IsDirty = e.IsDirty;
                convertDate(this);
        }
        
        firmcommission.IsEqual = function(entity){
                var e = entity;
                return this.CommissionID == e.CommissionID;
        }
        
        return firmcommission;
}());
var FirmSearchCriteria = (function() {
        var firmsearchcriteria = {};
        firmsearchcriteria.MaxResults = 0;
        firmsearchcriteria.FirmID = 0;
        firmsearchcriteria.Name = null;
        firmsearchcriteria.FirmTypeID = { ID: 0, Value: "" };
        firmsearchcriteria.FirmStatusID = { ID: 0, Value: "" };
        firmsearchcriteria.TestAccount = 0;
        firmsearchcriteria.FirmUniqueId = null;
        firmsearchcriteria.FirmAddressUniqueId = null;
        firmsearchcriteria.ProfileUniqueId = null;
        firmsearchcriteria.FirmIDs = null;
        firmsearchcriteria.FirmAddressIDs = null;
        firmsearchcriteria.FirstName = null;
        firmsearchcriteria.LastName = null;
        return firmsearchcriteria;
}());
var FirmSearchResult = (function() {
        var firmsearchresult = {};
        firmsearchresult.FirmID = 0;
        firmsearchresult.FirmTypeID = { ID: 0, Value: "" };
        firmsearchresult.FirmStatusID = { ID: 0, Value: "" };
        firmsearchresult.Name = null;
        firmsearchresult.HasFranchisees = false;
        return firmsearchresult;
}());
var Profile = (function() {
        var profile = {};
        profile.ProfileID = 0;
        profile.UniqueId = "60d1ed9c-dffc-4bd2-9fb5-bc8989abb9e8";
        profile.FirmUniqueId = null;
        profile.FirmAddressUniqueId = null;
        profile.ProfileStatusID = { ID: 0, Value: "" };
        profile.RoleID = { ID: 0, Value: "" };
        profile.FirstName = "";
        profile.LastName = "";
        profile.MiddleName = null;
        profile.Phone = "";
        profile.Mobile = "";
        profile.Fax = null;
        profile.MainContact = false;
        profile.Email = null;
        profile.Username = null;
        profile.Password = null;
        profile.Reference = null;
        profile.AccountTypeID = { ID: 2, Value: "" };
        profile.TOU = false;
        profile.Locked = false;
        profile.PasswordExpired = false;
        profile.EmailConfirmed = false;
        profile.AccountCreated = false;
        profile.AccountCreatedDate = null;
        profile.PasswordCreatedDate = null;
        profile.NumberOfAttempt = 0;
        profile.LastAttemptDate = null;
        profile.TOUAcceptedDate = null;
        profile.PrivacyNoticeViewDate = null;
        profile.FirmName = null;
        profile.PrivacyNoticeFlag = false;
        profile.PermissionCollection = {};
        profile.FirmAddress = {};
        profile.Name = " ";
        profile.OfficeAddress = null;
        profile.Permissions = null;
        profile.AccessType = 0;
        profile.AccountTypeChange = false;
        profile.WhiteLabel = 0;
        profile.Extend = function(){
                extend(this,"Profile");
                extendEntity(this,"FirmAddress");
                extendCollection(this,"PermissionCollection","UserPermission");
                this.IsDirty = false;
                this.IsNew = this.ProfileID == 0;
        }
        
        profile.Update = function(entity){
                var e = entity;
                this.set("UniqueId",e.UniqueId);
                this.set("ProfileID",e.ProfileID);
                this.set("FirmUniqueId",e.FirmUniqueId);
                this.set("FirmAddressUniqueId",e.FirmAddressUniqueId);
                this.set("Username",e.Username);
                this.set("Name",e.Name);
                this.set("AccountCreated",e.AccountCreated);
                this.set("Permissions",e.Permissions);
                this.set("FirstName",e.FirstName);
                this.set("MiddleName",e.MiddleName);
                this.set("LastName",e.LastName);
                this.set("Fax",e.Fax);
                this.set("RoleID",e.RoleID);
                this.set("ProfileStatusID",e.ProfileStatusID);
                this.set("AccountTypeChange",e.AccountTypeChange);
                this.set("AccountTypeID",e.AccountTypeID);
                this.set("TOU",e.TOU);
                this.set("Email",e.Email);
                this.set("Mobile",e.Mobile);
                this.set("Phone",e.Phone);
                this.set("AccountCreatedDate",e.AccountCreatedDate);
                this.set("PasswordCreatedDate",e.PasswordCreatedDate);
                this.set("LastAttemptDate",e.LastAttemptDate);
                this.set("TOUAcceptedDate",e.TOUAcceptedDate);
                this.set("PrivacyNoticeViewDate",e.PrivacyNoticeViewDate);
                this.set("EmailConfirmed",e.EmailConfirmed);
                this.set("OfficeAddress",e.OfficeAddress);
                this.set("Permissions",e.Permissions);
                this.set("AllErrors",e.AllErrors);
                this.set("IsReadOnly",e.IsReadOnly);
                this.set("IsNew",e.IsNew);
                this.IsDirty = e.IsDirty;
                this.PermissionCollection.Update(e.PermissionCollection);
        }
        
        profile.IsEqual = function(entity){
                var e = entity;
                return this.UniqueId.toUpperCase() == e.UniqueId.toUpperCase();
        }
        
        return profile;
}());
var ProfilePassword = (function() {
        var profilepassword = {};
        profilepassword.ProfilePasswordID = 0;
        profilepassword.ProfileUniqueId = null;
        profilepassword.Password = null;
        profilepassword.IsActive = false;
        profilepassword.IsTemporary = false;
        profilepassword.Extend = function(){
                extend(this,"ProfilePassword");
                this.IsDirty = false;
                this.IsNew = this.ProfilePasswordID == 0;
        }
        
        profilepassword.PasswordHistory = null;
        profilepassword.Update = function(entity){
                var e = entity;
                this.set("ProfilePasswordID",e.ProfilePasswordID);
                this.set("ProfileUniqueId",e.ProfileUniqueId);
                this.set("Password",e.Password);
                this.set("IsActive",e.IsActive);
                this.set("IsTemporary",e.IsTemporary);
                this.set("IsNew",e.IsNew);
                this.IsDirty = e.IsDirty;
        }
        
        profilepassword.IsEqual = function(entity){
                var e = entity;
                return this.ProfilePasswordID == e.ProfilePasswordID;
        }
        
        return profilepassword;
}());
var ProfileSearchCriteria = (function() {
        var profilesearchcriteria = {};
        profilesearchcriteria.FirmUniqueId = null;
        profilesearchcriteria.FirmAddressUniqueId = null;
        profilesearchcriteria.ProfileID = 0;
        profilesearchcriteria.ProfileStatusID = { ID: 0, Value: "" };
        profilesearchcriteria.FirstName = null;
        profilesearchcriteria.LastName = null;
        profilesearchcriteria.Name = null;
        profilesearchcriteria.Username = null;
        profilesearchcriteria.Email = null;
        profilesearchcriteria.AccountTypeID = { ID: 0, Value: "" };
        profilesearchcriteria.Password = null;
        profilesearchcriteria.TestAccount = 0;
        return profilesearchcriteria;
}());
var ProfileSearchResult = (function() {
        var profilesearchresult = {};
        profilesearchresult.ProfileID = 0;
        profilesearchresult.ProfileTypeID = { ID: 0, Value: "" };
        profilesearchresult.ProfileStatusID = { ID: 0, Value: "" };
        profilesearchresult.RoleID = { ID: 0, Value: "" };
        profilesearchresult.FirstName = null;
        profilesearchresult.MiddleName = null;
        profilesearchresult.LastName = null;
        profilesearchresult.Phone = null;
        profilesearchresult.Mobile = null;
        profilesearchresult.Fax = null;
        profilesearchresult.Email = null;
        profilesearchresult.UserName = null;
        profilesearchresult.Password = null;
        profilesearchresult.Reference = null;
        profilesearchresult.IsAdministrator = false;
        return profilesearchresult;
}());
AccountTypesEnum = {
        Administrator: 1,
        General: 2
};
FirmDiscountsEnum = {
        SLCDiscount: 1
};
FirmStatusesEnum = {
        Active: 1,
        Inactive: 2
};
FirmTypesEnum = {
        Solicitor: 1,
        Broker: 2,
        LicensedConveyancer: 3,
        SearchAgent: 4,
        Other: 5
};
PaymentTypesEnum = {
        Credit: 1,
        NonCredit: 2
};
ProfileStatusesEnum = {
        Current: 1,
        Suspended: 2
};
ProfileTypesEnum = {
        New: 1,
        Current: 2,
        Old: 3
};
RolesEnum = {
        Solicitor: 1,
        Broker: 2,
        Partner: 3,
        Associate: 4,
        OtherFeeEarner: 5,
        SupportStaffAdministration: 6,
        Accounts: 7
};
WhiteLabelsEnum = {
        None: 0,
        SLC: 1,
        XPressLegal: 2,
        DMHall: 3,
        IndemnitiesUK: 4,
        Searchmove: 5
};

$.extend(true, Firm, {
    setupHandlers: function () {
        this.ProfileCollection.setupHandlers();
        this.AddressCollection.setupHandlers();
    },
    getWhiteLabel: function () {
        var that = this;
        if (!that.Introducer) return WhiteLabelsEnum.None;

        switch (that.Introducer.Name.trim().toUpperCase()) {
            case "SOCIETY OF LICENSED CONVEYANCERS LTD":
                return WhiteLabelsEnum.SLC;
            case "X-PRESS LEGAL SERVICES LTD":
                return WhiteLabelsEnum.XPressLegal;
            case "DM HALL":
                return WhiteLabelsEnum.DMHall;
            case "SEARCHES UK":
                return WhiteLabelsEnum.IndemnitiesUK;
            case "SEARCHMOVE":
                return WhiteLabelsEnum.Searchmove;
            default:
                return WhiteLabelsEnum.None;
        }
    }
});

$.extend(true, Profile, {
    getProfileinfo: function () {
        var that = this;
        var profileInfo = "<tr><td class='c-msg-info-table-align-td'>" + localizedResource.NameLabel + " :</td><td>" + that.Name + "</td></tr>" +
                         "<tr><td class='c-msg-info-table-align-td'>" + localizedResource.AddressLabel + " :</td><td>" + that.FirmAddress.FullAddress + "</td></tr>" +
                         "<tr><td class='c-msg-info-table-align-td'>" + localizedResource.EmailLabel + " : </td><td>" + that.Email + "</td></tr>" +
                         "<tr><td class='c-msg-info-table-align-td'>" + localizedResource.MobileLabel + " : </td><td>" + that.Mobile + "</td></tr>" +
                         "<tr><td class='c-msg-info-table-align-td'>" + localizedResource.PhoneLabel + " : </td><td>" + that.Phone + "</td></tr>"
        return profileInfo;
    }
});
