(function(){
'use strict';
var submit=document.getElementById("client-review-submit");
var showFormButton=document.getElementById("show-form-button");
var emptyStars=document.getElementsByClassName("far fa-star");
var ratingVal=document.getElementById("client_review_rating");
var replySubmit=document.getElementsByClassName("admin-reply-submit");
var showCommFormButtons=document.getElementsByClassName("show-comment-form-button");
submit.addEventListener("click", validateReviewForm);
ratingVal.value="";
for (var i=0; i < showCommFormButtons.length; i++){
showCommFormButtons[i].addEventListener("click", showFormButton);
}
for (var j=0; j < emptyStars.length; j++){
emptyStars[j].addEventListener("click", setRating);
emptyStars[j].addEventListener("mouseover", hoverStars);
emptyStars[j].addEventListener("mouseout", removeMouse);
}
for (var k=0; k < replySubmit.length; k++){
replySubmit[k].addEventListener("click", submitAdminReply);
}
document.querySelectorAll('.show-comment-form-button').forEach(function(button){
var originalText=button.textContent;
var newText="Hide Form";
button.addEventListener('click', function (){
var commentForm=button.closest('.rev-cont')?.querySelector('.comment-form-container');
if(commentForm){
var isVisible=window.getComputedStyle(commentForm).display!=="none";
commentForm.style.display=isVisible ? "none":"initial";
button.textContent=isVisible ? originalText:newText;
}});
});
var omega_button=document.querySelector('#show-form-button, #lat-button');
var omega_main=document.getElementsByClassName('form-container');
var omega_state=true;
var originalText=omega_button.textContent;
var newText="Hide Form";
omega_button.addEventListener('click', function (event){
if(omega_state){
omega_state=false;
Array.from(omega_main).forEach(function(element){
element.style.display="initial";
});
omega_button.textContent=newText;
}else{
omega_state=true;
Array.from(omega_main).forEach(function(element){
element.style.display="none";
});
omega_button.textContent=originalText;
}});
function validateReviewForm(e){
var TITLE_MIN_CHAR=5;
var FIELD_MAX_CHAR=30;
var REVIEW_MIN_CHAR=30;
var REVIEW_MAX_CHAR=2100;
var errorContainer=document.getElementById("form-feedback-container");
var title=document.getElementById("client_review_title");
var name=document.getElementById("client_review_name");
var email=document.getElementById("client_review_email");
var rating=document.getElementById("client_review_rating");
var body=document.getElementById("client_review_body");
var isHuman=document.getElementById("client-is-human");
var ajaxSpinner=document.getElementById("ajax-spin");
var fields=[title, name, email, rating, body];
cleanErrors(fields);
ajaxSpinner.style.display="inline-block";
if(!isHuman.checked){
createFeedback("Error: Please check the box to prove you are human.", isHuman, false, e);
}
if(title.value.length > 0){
if(title.value.length < TITLE_MIN_CHAR){
createFeedback("Error: Title must be at least 5 characters.", title, false, e);
}else if(title.value.length > FIELD_MAX_CHAR){
createFeedback("Error: Title must not exceed 30 characters.", title, false, e);
}}
if(name.value.length > 0){
if(name.value.length > FIELD_MAX_CHAR){
createFeedback("Error: Name must not exceed 30 characters", name, false, e);
}}else{
createFeedback("Error: You must enter a name.", name, false, e);
}
if(email.value.length > 0){
var regex=/^(([^<>()[\]\\.,;:\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,}))$/;
if(!email.value.match(regex)){
createFeedback("Error: You must enter a valid email address.", email, false, e);
}}else{
createFeedback("Error: You must enter an email.", email, false, e);
}
if(rating.value.length==0){
createFeedback("Error: You must enter a review of 1 - 5 stars.", rating, false, e);
}
if(body.value.length > 0){
if(body.value.length < REVIEW_MIN_CHAR){
createFeedback("Error: You must enter at least 30 characters in the review body.", body, false, e);
}else if(body.value.length > REVIEW_MAX_CHAR){
createFeedback("Error: Your review must not exceed 2100 characters.", body, false, e);
}}else{
createFeedback("Error: You must enter a review.", body, false, e);
}
if(errorContainer.childNodes.length==0){
var postScriptURL=window.location.protocol + '//' + window.location.hostname + '/wp-content/plugins/client-plugins/client-reviews/post-review.php';
$.post(postScriptURL,
{
biziq_review_title: title.value,
biziq_review_name: name.value,
biziq_review_email: email.value,
biziq_review_rating: rating.value,
biziq_review_body: body.value
},
function (data, status){
cleanFields(fields);
ajaxReviewResponse(status);
}
);
}
ajaxSpinner.style.display="none";
}
function submitAdminReply(){
var commentForm=this.parentNode;
var adminReply=commentForm.getElementsByClassName("review-comment-input")[0].value;
var reviewID=commentForm.getElementsByClassName("review_id")[0].value;
var commentScriptURL=window.location.protocol + '//' + window.location.hostname + '/wp-content/plugins/client-plugins/client-reviews/post-comment.php';
if(adminReply.length > 0){
$.post(commentScriptURL,
{
biziq_admin_reply: adminReply,
review_id: reviewID
},
function (data, status){
ajaxCommentResponse(data, status, commentForm);
}
);
}}
function createFeedback(message, field, success, event){
var feedBackContainer=document.getElementById("form-feedback-container");
var newFBMessage=document.createElement("strong");
var fBClassName=success ? "f-success":"f-error";
var errorHighlight=success ? "client-review-input":"client-review-input error";
newFBMessage.className=fBClassName;
newFBMessage.innerHTML=message;
field.className=errorHighlight;
feedBackContainer.appendChild(newFBMessage);
event.preventDefault();
}
function cleanErrors(fields){
var feedBackContainer=document.getElementById("form-feedback-container");
var errors=feedBackContainer.childNodes;
for (var i=0; i < fields.length; i++){
fields[i].className="client-review-input";
}
feedBackContainer.innerHTML="";
}
function cleanFields(fields){
var isHuman=document.getElementById("client-is-human");
for (var i=0; i < fields.length; i++){
fields[i].value="";
}
isHuman.checked=false;
}
function ajaxReviewResponse(status){
var form=document.getElementById("leaveAreview");
if(status=='success'){
form.innerHTML +='<strong class="f-success">Your review has been submitted successfully and is now pending approval.</strong>';
}else{
form.innerHTML +='<strong class="f-error">Error: Your review could not be submitted. Please try again later.</strong>';
}}
function ajaxCommentResponse(data, status, formContainer){
var commentContainer=formContainer.parentNode.parentNode;
if(status=='success'){
var object=JSON.parse(data);
var adminReply=object.reply;
var adminReplyDate=object.replyDate;
commentContainer.innerHTML =
"<span class='admin-reply-date'>" + adminReplyDate + "</span>" +
"<span class='admin-reply-label'>Reply from business owner:</span>" +
"<div class='admin-reply'>" + adminReply + "</div>";
}}
function hoverStars(){
if(this.className.indexOf('set') < 0){
var starIndex=this.id - 1;
var stars=document.getElementsByClassName("star");
for (var i=0; i <=starIndex; i++){
stars[i].className="fas fa-star star";
}}
}
function removeMouse(){
if(this.className.indexOf('set') < 0){
var stars=document.getElementsByClassName("star");
for (var i=0; i < stars.length; i++){
stars[i].className="far fa-star star";
}}
}
function setRating(){
var starIndex=this.id;
var stars=document.getElementsByClassName("star");
var ratingInput=document.getElementById("client_review_rating");
if(this.className.indexOf('set') > 0){
for (var i=0; i < stars.length; i++){
stars[i].className="far fa-star star";
}}
for (var i=0; i <=starIndex - 1; i++){
stars[i].className="fas fa-star star";
}
for (var i=0; i < stars.length; i++){
stars[i].className +=" set";
}
ratingInput.value=starIndex;
}})();