$(function(){
$("form.appnitro").data('active_element','');
var field_highlight_color = $("form.appnitro").data('highlightcolor');
//attach event handler to all form fields, to highlight the selected list (except for matrix field)
$("form.appnitro :input").bind('click focus',function(){
var current_li = $(this).closest("li").not('.matrix').not('.buttons');
$("form.appnitro").data('active_element',current_li.attr('id'));
if(current_li.hasClass('highlighted') != true){
$("form.appnitro li.highlighted").removeClass('highlighted'); //remove any previous highlight
if(field_highlight_color != ''){
//if the user goes through fields too fast, we need to make sure to remove the previous highlight coming from previous animation
current_li.siblings().not('#li_resume_email').stop(); //stop the highlight animation
current_li.siblings().not('#li_resume_email').css('background-color',''); //remove the remaining color style
current_li.animate({ backgroundColor: field_highlight_color }, 500, 'swing',function(){
if(current_li.attr('id') == $("form.appnitro").data('active_element')){
current_li.addClass('highlighted').css('background-color','');
current_li.siblings().not('#li_resume_email').css('background-color',''); //remove the remaining color style
}else{
current_li.css('background-color','');
}
});
}else{
//if background pattern/image being used, simply add the highlight class
current_li.addClass('highlighted').css('background-color','');
}
}
});
//if the form has file upload field, attach custom submit handler to the form
//make sure all files are being uploaded prior submitting the form
if($("#main_body div.file_queue").length > 0){
$('form.appnitro').submit(function() {
if($("form.appnitro").data('form_submitting') !== true){
$("#li_buttons > input[type=submit]").prop("disabled",true);
$("form.appnitro").data('form_submitting',true);
upload_all_files();
return false;
}else{
return true;
}
});
//when using advanced file upload, the buttons are not being sent
//we need to convert them into hidden field to make sure the clicked button value is being sent
$("#submit_secondary").click(function(){
$("#li_buttons").append('');
});
$("#submit_primary").click(function(){
$("#li_buttons").append('');
});
}
//if the form has resume enabled, attach event handler to the resume checkbox
if($("#li_resume_checkbox").length > 0){
$('#element_resume_checkbox').bind('change', function() {
if($(this).prop("checked") == true){
//display the email input and change the submit button
$("#li_resume_email").show();
//hide all existing buttons
$("#li_buttons > input").hide();
//add the save form button
$("#li_buttons").append('');
$("#button_save_form").click(function(){
$("#li_buttons").append('');
$("form.appnitro").submit();
});
}else{
//hide the email input and restore the original submit button
$("#li_resume_email").hide();
$("#button_save_form").remove();
$("#li_buttons > input").show();
}
if($("html").hasClass("embed")){
$.postMessage({mf_iframe_height: $('body').outerHeight(true)}, '*', parent );
}
});
//if the user entered invalid address, the 'data-resumebutton' will contain value 1
//we need to display the save form button again and hide others
if($("#li_resume_email").data("resumebutton") == '1'){
//hide all existing buttons
$("#li_buttons > input").hide();
//add the save form button
$("#li_buttons").append('');
$("#button_save_form").click(function(){
$("#li_buttons").append('');
$("form.appnitro").submit();
});
}
//attach additional event handler to the form submit
$('form.appnitro').submit(function(){
if($("#li_buttons > input:visible").attr("id") == 'button_save_form'){
$("#li_buttons").append('');
}
});
}
//if the form has payment enabled and the total is being displayed into the form, we need to calculate the total
//and attach event handler to price-assigned fields
if($(".total_payment").length > 0){
calculate_total_payment();
//attach event handler on radio buttons with price assigned
$('#main_body li[data-pricefield="radio"]').delegate('input.radio', 'click', function(e) {
var selected_radio = $(this);
var temp = selected_radio.attr("id").split('_');
var element_id = temp[1];
var pricedef = selected_radio.data('pricedef');
if(pricedef == null){
pricedef = 0;
}
$("#li_" + element_id).data("pricevalue",pricedef);
calculate_total_payment();
});
//attach event handler on checkboxes with price assigned
$('#main_body li[data-pricefield="checkbox"]').delegate('input.checkbox', 'click', function(e) {
var temp = $(this).attr("id").split('_');
var element_id = temp[1];
var child_checkboxes = $("#li_" + element_id + " input.checkbox");
var total_price = 0;
child_checkboxes.each(function(index){
if($(this).data('pricedef') != null && $(this).prop("checked") == true){
total_price += $(this).data('pricedef');
}
});
$("#li_" + element_id).data("pricevalue",total_price);
calculate_total_payment();
});
//attach event handler on dropdown with price assigned
$('#main_body li[data-pricefield="select"]').delegate('select', 'change', function(e) {
var temp = $(this).attr("id").split('_');
var element_id = temp[1];
var pricedef = $(this).find('option:selected').data('pricedef');
if(pricedef == null){
pricedef = 0;
}
$("#li_" + element_id).data("pricevalue",pricedef);
calculate_total_payment();
});
//attach event handler to money field (dollar, euro, etc)
$('#main_body li[data-pricefield="money"]').delegate('input.text','keyup mouseout change', function(e) {
var temp = $(this).attr("id").split('_');
var element_id = temp[1];
var price_value = $("#element_" + element_id + "_1").val() + '.' + $("#element_" + element_id + "_2").val();
price_value = parseFloat(price_value);
if(isNaN(price_value)){
price_value = 0;
}
$("#li_" + element_id).data("pricevalue",price_value);
calculate_total_payment();
});
//attach event handler to simple money field (yen)
$('#main_body li[data-pricefield="money_simple"]').delegate('input.text','keyup mouseout change', function(e) {
var temp = $(this).attr("id").split('_');
var element_id = temp[1];
var price_value = $(this).val();
price_value = parseFloat(price_value);
if(isNaN(price_value)){
price_value = 0;
}
$("#li_" + element_id).data("pricevalue",price_value);
calculate_total_payment();
});
}
//if the password box is being displayed, add the class 'no_guidelines into the main_body
if($("form.appnitro ul.password").length > 0){
$("#main_body").addClass('no_guidelines');
}
//workaround for mobile safari, to allow tapping on label
$('form.appnitro label').click(function(){});
});
/** Payment Functions **/
function calculate_total_payment(){
var total_payment = 0;
$("#main_body li[data-pricevalue]").each(function(index){
total_payment += parseFloat($(this).data('pricevalue'));
});
total_payment += parseFloat($('.total_payment').data('basetotal'));
$(".total_payment var").text(total_payment.toFixed(2));
}
/** Date Picker Functions **/
function select_date(dates){
var ids = $(this).attr("id").split('_');
$('#element_' + ids[1] + '_1').val(dates.length ? dates[0].getMonth() + 1 : '');
$('#element_' + ids[1] + '_2').val(dates.length ? dates[0].getDate() : '');
$('#element_' + ids[1] + '_3').val(dates.length ? dates[0].getFullYear() : '');
$('#element_' + ids[1] + '_1').change();
}
function select_europe_date(dates){
var ids = $(this).attr("id").split('_');
$('#element_' + ids[1] + '_2').val(dates.length ? dates[0].getMonth() + 1 : '');
$('#element_' + ids[1] + '_1').val(dates.length ? dates[0].getDate() : '');
$('#element_' + ids[1] + '_3').val(dates.length ? dates[0].getFullYear() : '');
$('#element_' + ids[1] + '_1').change();
}
/** File Upload Functions **/
function remove_attachment(filename,form_id,element_id,holder_id,is_db_live,key_id){
var machform_path = '';
if (typeof __machform_path != 'undefined'){
machform_path = __machform_path;
}
$("#" + holder_id + " > div.cancel img").attr("src", machform_path + "images/loader_small_grey.gif");
$.ajax({
type: "POST",
async: true,
url: machform_path + "delete_file_upload.php",
data: {
filename: filename,
form_id: form_id,
element_id: element_id,
holder_id: holder_id,
is_db_live: is_db_live,
key_id: key_id
},
cache: false,
global: true,
dataType: "json",
error: function(xhr,text_status,e){
//remove the delete progress on error
$("#" + holder_id + " > div.cancel img").attr("src",machform_path + "images/icons/delete.png");
alert('Error! Unable to delete file.');
},
success: function(response_data){
if(response_data.status == 'ok'){
$("#" + response_data.holder_id).fadeOut("slow",function(){$(this).remove();});
}else{
//unknown error, response json improperly formatted
$("#" + holder_id + " > div.cancel img").attr("src",machform_path + "images/icons/delete.png");
alert('Error while deleting the file. Please try again.');
}
} //end on ajax success
}); //end ajax call
}
function check_upload_queue(element_id,is_multi,queue_limit,alert_message){
//check for queue limit
if(is_multi == true){
var queue_children = $("#element_" + element_id + "_queue").children().not('.uploadifyError');
if(queue_children.length > queue_limit){
alert(alert_message);
for(i=0;i<=queue_children.length;i++){
if(i>=queue_limit){
$("#element_" + element_id).uploadifyCancel(queue_children.eq(i).attr('id').slice(-6));
}
}
}
}
}
function upload_all_files(){
$("#main_body div.uploadifyQueueItem").not('.completed').parent().siblings('input.element').eq(0).uploadifyUpload();
if($("#main_body div.uploadifyQueueItem").not('.completed').length < 1){
$('form.appnitro').submit();
}
}
/** Input Range Functions **/
function count_input(element_id,range_limit_by){
var current_length = 0;
if(range_limit_by == 'c' || range_limit_by == 'd'){
current_length = $("#element_" + element_id).val().length;
}else if(range_limit_by == 'w'){
current_length = $("#element_" + element_id).val().trim().split(/[\s\.]+/).length; //we consider a word is one or more characters separated by space or dot
}
$("#currently_entered_" + element_id).text(current_length);
return current_length;
}
function limit_input(element_id,range_limit_by,range_max){
var current_length = count_input(element_id,range_limit_by);
if(current_length > range_max){
if(range_limit_by == 'c' || range_limit_by == 'd'){
$("#element_" + element_id).val($("#element_" + element_id).val().substr(0,range_max));
$("#currently_entered_" + element_id).text(range_max);
}else if(range_limit_by == 'w'){
//for now, we don't limit the words on client side, only server side validation
}
}
}
//clear checkbox 'other'
function clear_cb_other(cb_element,element_id){
if($(cb_element).prop("checked") == false){
$("#element_" + element_id + "_other").val('');
}
}