Added validation for relationship
diff --git a/src/Orchard.Web/Modules/Coevery.Relationship/Controllers/RelationshipController.cs b/src/Orchard.Web/Modules/Coevery.Relationship/Controllers/RelationshipController.cs
index 4f9d02d..806f6df 100644
--- a/src/Orchard.Web/Modules/Coevery.Relationship/Controllers/RelationshipController.cs
+++ b/src/Orchard.Web/Modules/Coevery.Relationship/Controllers/RelationshipController.cs
@@ -23,6 +23,10 @@
             T = NullLocalizer.Instance;
         }
 
+        public object GetRelationNameValidation(string relationName) {
+            return new { ErrorMessage = _relationshipService.CheckRelationName(relationName)};
+        }
+
         public object Get(string entityName, int page, int rows) {
             var temp = _relationshipService.GetRelationships(entityName);
             //if (temp == null) {
diff --git a/src/Orchard.Web/Modules/Coevery.Relationship/Controllers/SystemAdminController.cs b/src/Orchard.Web/Modules/Coevery.Relationship/Controllers/SystemAdminController.cs
index 80fc22b..c986c37 100644
--- a/src/Orchard.Web/Modules/Coevery.Relationship/Controllers/SystemAdminController.cs
+++ b/src/Orchard.Web/Modules/Coevery.Relationship/Controllers/SystemAdminController.cs
@@ -116,8 +116,13 @@
             if (!Services.Authorizer.Authorize(Permissions.PublishContent, T("Not allowed to edit a content."))) {
                 return new HttpUnauthorizedResult();
             }
-
+            
             if (oneToMany.IsCreate) {
+                var checkNameMessage = _relationshipService.CheckRelationName(oneToMany.Name);
+                if (!string.IsNullOrWhiteSpace(checkNameMessage)) {
+                    ModelState.AddModelError("OneToManyRelation", T(checkNameMessage).ToString());
+                    return ResponseError("");
+                }
                 var backMessage = _relationshipService.CreateRelationship(oneToMany);
                 int relationId;
                 if (int.TryParse(backMessage.ToString(),out relationId))
@@ -208,6 +213,11 @@
             }
 
             if (manyToMany.IsCreate) {
+                var checkNameMessage = _relationshipService.CheckRelationName(manyToMany.Name);
+                if (!string.IsNullOrWhiteSpace(checkNameMessage)) {
+                    ModelState.AddModelError("ManyToManyRelation", T(checkNameMessage).ToString());
+                    return ResponseError("");
+                }
                 var backMessage = _relationshipService.CreateRelationship(manyToMany);
                 int relationId;
                 if (int.TryParse(backMessage.ToString(), out relationId))
@@ -253,7 +263,11 @@
             var temp = (from values in ModelState
                 from error in values.Value.Errors
                 select error.ErrorMessage).ToArray();
-            return Content(string.Join("\n", temp) + ";\n" + errorMessage);
+            var result = string.Join("\n", temp);
+            if (!string.IsNullOrWhiteSpace(errorMessage)) {
+                result += "\n" + errorMessage;
+            }
+            return Content(result);
         }
     }
 }
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Coevery.Relationship/Scripts/controllers/manytomanydetailcontroller.js b/src/Orchard.Web/Modules/Coevery.Relationship/Scripts/controllers/manytomanydetailcontroller.js
index 7a2dde3..b27c2b0 100644
--- a/src/Orchard.Web/Modules/Coevery.Relationship/Scripts/controllers/manytomanydetailcontroller.js
+++ b/src/Orchard.Web/Modules/Coevery.Relationship/Scripts/controllers/manytomanydetailcontroller.js
@@ -29,7 +29,7 @@
                         logger.success('success');
                         $("input.primary-entity").prop('disabled', true);
                     }, function (result) {
-                        logger.error('Failed:\n' + result.responseText);
+                        logger.error('Failed:\n' + result);
                         $("input.primary-entity").prop('disabled', true);
                     });
                     return promise;
diff --git a/src/Orchard.Web/Modules/Coevery.Relationship/Scripts/controllers/onetomanydetailcontroller.js b/src/Orchard.Web/Modules/Coevery.Relationship/Scripts/controllers/onetomanydetailcontroller.js
index e6b9e97..59e041a 100644
--- a/src/Orchard.Web/Modules/Coevery.Relationship/Scripts/controllers/onetomanydetailcontroller.js
+++ b/src/Orchard.Web/Modules/Coevery.Relationship/Scripts/controllers/onetomanydetailcontroller.js
@@ -33,8 +33,9 @@
                         logger.success('success');
                         $("input.primary-entity").prop('disabled', true);
                     }, function (result) {
-                        logger.error('Failed:\n' + result.responseText);
+                        logger.error('Failed:\n' + result.data);
                         $("input.primary-entity").prop('disabled', true);
+                        return result;
                     });
                     return promise;
                 };
diff --git a/src/Orchard.Web/Modules/Coevery.Relationship/Services/IRelationshipService.cs b/src/Orchard.Web/Modules/Coevery.Relationship/Services/IRelationshipService.cs
index 6e43feb..46c2c33 100644
--- a/src/Orchard.Web/Modules/Coevery.Relationship/Services/IRelationshipService.cs
+++ b/src/Orchard.Web/Modules/Coevery.Relationship/Services/IRelationshipService.cs
@@ -5,6 +5,7 @@
 
 namespace Coevery.Relationship.Services {
     public interface IRelationshipService : IDependency {
+        string CheckRelationName(string name);
         SelectListItem[] GetEntityNames(string excludeEntity);
         SelectListItem[] GetFieldNames(string entityName);
         RelationshipRecord[] GetRelationships(string entityName);
diff --git a/src/Orchard.Web/Modules/Coevery.Relationship/Services/RelationshipService.cs b/src/Orchard.Web/Modules/Coevery.Relationship/Services/RelationshipService.cs
index 35c927e..80f3170 100644
--- a/src/Orchard.Web/Modules/Coevery.Relationship/Services/RelationshipService.cs
+++ b/src/Orchard.Web/Modules/Coevery.Relationship/Services/RelationshipService.cs
@@ -13,6 +13,7 @@
 using Orchard.Core.Contents.Extensions;
 using Orchard.Data;
 using Orchard.Projections.Models;
+using Orchard.Utility.Extensions;
 
 namespace Coevery.Relationship.Services {
     public class RelationshipService : IRelationshipService {
@@ -51,6 +52,17 @@
 
         #region GetMethods
 
+        public string CheckRelationName(string name) {
+            string errorMessage = null;
+            if (!string.Equals(name, name.ToSafeName())) {
+                errorMessage += "The name:\""+ name +"\" is not legal!\n";
+            }
+            if (_relationshipRepository.Fetch(relation => relation.Name == name).FirstOrDefault() != null) {
+                errorMessage += "The name:\"" + name + "\" already exists!\n";
+            }
+            return errorMessage;
+        }
+
         public string GetReferenceField(string entityName, string relationName) {
             var reference = _contentDefinitionManager
                 .GetPartDefinition(entityName)
diff --git a/src/Orchard.Web/Modules/Coevery.Relationship/Views/SystemAdmin/CreateOneToMany.cshtml b/src/Orchard.Web/Modules/Coevery.Relationship/Views/SystemAdmin/CreateOneToMany.cshtml
index f1309c2..db3e202 100644
--- a/src/Orchard.Web/Modules/Coevery.Relationship/Views/SystemAdmin/CreateOneToMany.cshtml
+++ b/src/Orchard.Web/Modules/Coevery.Relationship/Views/SystemAdmin/CreateOneToMany.cshtml
@@ -67,7 +67,7 @@
                 <legend>General Information</legend>
                                        
                 @DisplayInput("Relationship Name"
-                              , Html.TextBoxFor(model => model.Name, new { @class = "span12", id = "relation-name", required="" })
+                              , Html.TextBoxFor(model => model.Name, new { @class = "span12 checkNameValid", id = "relation-name", required="" })
                               ,"required")
                     
                 @DisplayInput("Primary Entity"
@@ -187,6 +187,18 @@
         function () {
             customPicklist($("#@Html.FieldIdFor(m=>m.ColumnFieldList)"));
 
+            $.validator.addMethod("checkNameValid", function (value, element, params) {
+                var temp;
+                $.get("api/relationship/relationship?relationName="+value,
+                    function (data) {
+                        temp = data.ErrorMessage;
+                    },
+                    "json"
+                );
+                return !temp;
+            }, "Wrong decimal format!");
+            $.validator.classRuleSettings.checkNameValid = { checkNameValid: true };
+
             var jsonUrl = "@Url.Action("FieldNames", "SystemAdmin", new RouteValueDictionary { { "Area", "Coevery.Relationship" } })";
             var version = 0;
             var getFields = function (entityName,selectElement) {
diff --git a/src/Orchard.Web/Themes/Mooncake/Scripts/js/setup-systemadmin.js b/src/Orchard.Web/Themes/Mooncake/Scripts/js/setup-systemadmin.js
index 2294787..595e0b4 100644
--- a/src/Orchard.Web/Themes/Mooncake/Scripts/js/setup-systemadmin.js
+++ b/src/Orchard.Web/Themes/Mooncake/Scripts/js/setup-systemadmin.js
@@ -78,9 +78,9 @@
 
 		// Bootstrap Dropdown Workaround for touch devices
 		$(document).on('touchstart.dropdown.data-api', '.dropdown-menu', function (e) { e.stopPropagation(); });
-				
+		
 		// Extend jQuery Validate Defaults.
-		// You mav remove this if you use an another validation library
+	    // You mav remove this if you use an another validation library
 		//if( $.validator ) {
 		//	$.extend( $.validator.defaults, {
 		//		errorClass: "error",