// A plugin for adding "A-Form" functionality.
// Copyright (c) 2008 ARK-Web Co.,Ltd.
function isEmpty(v) {
return ((v == null) || (v.length == 0) || /^\s+$/.test(v.toHankaku()));
}
function escapeHTML(str) {
return aform$('
').text(str).html();
}
function aformValidate_showErrors(errorMap, errorList) {
var icon = '

';
for( var i = 0; errorList[i]; i++ ){
errorList[i].message = icon + errorList[i].message;
}
this.defaultShowErrors();
}
function aformValidate_errorPlacement(error, elm) {
var id = elm[0].id;
if( elm[0].type == 'checkbox' || elm[0].type == 'radio' ){
id = id.replace(/(.*)-[^-]+$/, "$1");
}
if( elm[0].name.match(/(aform-field-[0-9]+)-[0-9]+-text$/) ){
id = id.replace(/(.*)-[0-9]+-text$/, "$1");
}
if( elm[0].id.match(/^(.*)-confirm$/) ){
id = RegExp.$1;
}
if( id.match(/^(.*-cardnumber)\d$/) ){
id = RegExp.$1;
}
error.addClass('validation-advice');
aform$('#'+ id +'-error').html(error);
}
function addAFormValidate() {
aform_jQuery.validator.addMethod('hankaku', function(v,elm) {
elm.value = elm.value.toHankaku();
return true;
});
aform_jQuery.validator.addMethod('required', function(v,elm) {
if (!aform$(elm).hasClass('required')) {
return true;
}
if( !isEmpty(v) ){
removeAFormInputErrorTitle(elm);
return true;
}else{
addAFormInputErrorTitle(elm);
postAFormErrorLog('empty', elm, v);
return false;
}
});
aform_jQuery.validator.addMethod('validate-length', function(v,elm) {
var max_length = aform$(elm).attr('maxlength');
v = v.replace(/\r/g, "");
v = v.replace(/\n/g, "");
if( v.length <= max_length ){
removeAFormInputErrorTitle(elm);
return true;
}else{
addAFormInputErrorTitle(elm);
postAFormErrorLog('max_length_error', elm, v);
return false;
}
});
aform_jQuery.validator.addMethod('validate-email', function(v,elm) {
if( isEmpty(v) || /^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/i.test(v) ){
removeAFormInputErrorTitle(elm);
return true;
}else{
addAFormInputErrorTitle(elm);
postAFormErrorLog('email_format_error', elm, v);
return false;
}
});
aform_jQuery.validator.addMethod('validate-url', function (v,elm) {
if( isEmpty(v) || /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(v) ){
removeAFormInputErrorTitle(elm);
return true;
}else{
addAFormInputErrorTitle(elm);
postAFormErrorLog('url_format_error', elm, v);
return false;
}
});
aform_jQuery.validator.addMethod('validate-tel', function(v,elm) {
if( isEmpty(v) || /^[0-9\-]+$/.test(v) ){
removeAFormInputErrorTitle(elm);
return true;
}else{
addAFormInputErrorTitle(elm);
postAFormErrorLog('tel_format_error', elm, v);
return false;
}
});
aform_jQuery.validator.addMethod('validate-zipcode', function(v,elm) {
if( isEmpty(v) || /^[0-9]{3}-[0-9]{4}$/.test(v) ){
removeAFormInputErrorTitle(elm);
return true;
}else{
addAFormInputErrorTitle(elm);
postAFormErrorLog('zipcode_format_error', elm, v);
return false;
}
});
aform_jQuery.validator.addMethod('validate-selection', function(v,elm){
if( !isEmpty(v) ){
removeAFormInputErrorTitle(elm);
return true;
}else{
addAFormInputErrorTitle(elm);
postAFormErrorLog('not_selected', elm, v);
return false;
}
});
aform_jQuery.validator.addMethod('validate-one-required', function(v,elm) {
var field_id = elm.name.match(/^aform-field-[0-9]+/);
var reg;
if( elm.type == 'checkbox' ){
reg = new RegExp( '^'+ field_id +'-[0-9]+$' );
}else{
reg = new RegExp( '^'+ field_id +'$');
}
var options = elm.form.getElementsByTagName('INPUT');
var check = false;
aform$(options).each(function() {
if( this.name.search(reg) == -1 ){
return true;
}
if( this.checked ){
check = true;
return false;
}
});
if( check ){
hideAFormAdvice(elm);
removeAFormInputErrorTitle(elm);
return true;
}else{
addAFormInputErrorTitle(elm);
postAFormErrorLog('empty', elm, '');
return false;
}
});
aform_jQuery.validator.addMethod('validate-option-text', function(v,elm) {
var matches = elm.id.match(/^(.*)-([0-9]+)-text$/);
if( matches.length > 0 ){
var field_id = matches[1];
var option_idx = matches[2];
if( aform$('#'+field_id+'-'+option_idx)[0].checked && isEmpty(v) ){
addAFormInputErrorTitle(elm);
postAFormErrorLog('empty', elm, v);
return false;
}else{
removeAFormInputErrorTitle(elm);
return true;
}
}
return true;
});
aform_jQuery.validator.addMethod('validate-upload', function(v,elm) {
if( !isEmpty(v) ){
removeAFormInputErrorTitle(elm);
return true;
}else{
addAFormInputErrorTitle(elm);
postAFormErrorLog('empty', elm, v);
return false;
}
});
aform_jQuery.validator.addMethod('validate-privacy', function(v,elm) {
var field_id = elm.name.match(/^aform-field-[0-9]+/);
var reg = new RegExp( field_id );
var options = elm.form.getElementsByTagName('INPUT');
var check = false;
aform$(options).each(function() {
if( this.name.search(reg) == -1 ){
return true;
}
if( this.checked ){
check = true;
return false;
}
});
if( check ){
removeAFormInputErrorTitle(elm);
return true;
}else{
addAFormInputErrorTitle(elm);
postAFormErrorLog('privacy_error', elm, '');
return false;
}
});
aform_jQuery.validator.addMethod('require-twice', function(v,elm) {
if (elm.id.match(/^(.*)-confirm$/)) {
var orig_id = RegExp.$1;
var orig_elm = aform_jQuery('#' + orig_id);
if (v == orig_elm.val()) {
removeAFormInputErrorTitle(elm);
return true;
}else{
addAFormInputErrorTitle(elm);
postAFormErrorLog('require_twice', elm, v);
return false;
}
}
});
aform_jQuery.validator.addMethod('validate-name', function(v,elm) {
if (v.match(/%/)) {
addAFormInputErrorTitle(elm);
postAFormErrorLog('validate_name', elm, v);
return false;
}else{
removeAFormInputErrorTitle(elm);
return true;
}
});
aform_jQuery.validator.addMethod('validate-name-kana', function(v,elm) {
elm.value = elm.value.toZenkakuKana();
if (isEmpty(elm.value) || elm.value.isKanaOnly()) {
removeAFormInputErrorTitle(elm);
return true;
}else{
addAFormInputErrorTitle(elm);
postAFormErrorLog('validate_name_kana', elm, v);
return false;
}
});
var disable_methods = ['remote', 'minlength', 'maxlength', 'rengelength', 'min', 'max', 'range', 'email', 'url', 'date', 'dateISO', 'number', 'digits', 'creditcard', 'accept', 'equalTo', 'phoneUS'];
aform_jQuery.each(disable_methods, function(idx, val) {
aform_jQuery.validator.addMethod(val, function (v,elm) {
return true;
});
});
}
function addAFormInputErrorTitle(elm)
{
if( ! elm.title.match(eval("/^"+ aform.phrases['Input error:'] +"/")) ){
elm.title = aform.phrases['Input error:'] + elm.title;
}
}
function removeAFormInputErrorTitle(elm)
{
elm.title = elm.title.replace(eval("/"+ aform.phrases['Input error:'] +"/"), "");
}
function hideAFormAdvice(elm)
{
var field_id = elm.id.replace(/(.*)-[0-9]+$/, "$1");
aform$('#' + field_id + '-error').html('');
}
function postAFormAccessLog(aform_id)
{
var params = {
screen : 'form',
run_mode : 'access',
aform_id : aform_id,
aform_url : document.location.href,
first_access : aform$.cookie(document.location.pathname) ? 0 : 1
};
aform_jQuery.post(
aform.logger_url,
params
);
var date = new Date();
date.setTime(date.getTime() + 30*60*1000);
aform$.cookie(document.location.pathname, "1", { expires: date}); // expires sec
}
function postAFormErrorLog(type, elm, value)
{
var aform_id = elm.form.id.value;
var field_id = elm.name.replace(/aform-field-(\d+).*/, "$1");
var params = {
run_mode : 'error',
aform_id : aform_id,
aform_url : document.location.href,
type : type,
error_field_id : field_id,
error_value : value
};
aform_jQuery.post(
aform.logger_url,
params
);
}
function postAFormChecker()
{
aform_jQuery.post(aform.checker_url);
}
function postAFormActiveChecker(aform_id)
{
aform_jQuery('.aform-checking').show();
aform_jQuery('.aform-content').hide();
var params = {
__mode : 'rebuild_aform',
aform_id : aform_id
};
aform_jQuery.post(
aform.checker_url,
params,
reload_if_rebuild
);
}
function reload_if_rebuild(response)
{
if( response == 'rebuild' ){
document.location.reload();
}else{
aform_jQuery('.aform-checking').hide();
aform_jQuery('.aform-content').show();
}
}
function regist_ajax_upload(field_id, size, type){
var ext = '';
if( type != '' ){
var types = type.split(',');
for( i = 0; i < types.length; i++ ){
types[i] = '*.' + types[i].replace(/^\s+|\s+$/g, '');
}
ext = types.join(';');
}
if( size <= 0 ){
size = '';
}
aform_jQuery('#aform-upload-button-' + field_id).fileUpload({
'script' : aform.upload_script_url,
'uploader' : aform.static_uri + 'plugins/AForm/js/jquery.uploadify/uploader.swf',
'cancelImg' : aform.static_uri + 'plugins/AForm/js/jquery.uploadify/cancel.png',
// 'buttonImg' : aform.static_uri + 'plugins/AForm/js/jquery.uploadify/button.gif',
'auto' : true,
'sizeLimit' : size,
'fileDesc' : ext,
'fileExt' : ext,
'fileDataName' : 'upload_file',
'scriptData' : {
run_mode : 'upload',
aform_id : 1,
field_id : field_id
},
'onComplete' : function(event, queueID, fileObj, responseText, data){
var response = eval("(" + responseText + ")");
aform_jQuery('#aform-upload-info-' + field_id).text(fileObj.name + response.message);
switch( response.result ){
case 'success':
aform_jQuery('#aform-field-' + field_id).val(response.id);
aform_jQuery('#aform-upload-name-' + field_id).val(fileObj.name);
aform_jQuery('#aform-upload-remove-' + field_id).show();
aform_jQuery('#advice-validate-upload-aform-field-' + field_id).hide();
break;
default:
aform_jQuery('#aform-field-' + field_id).val('');
aform_jQuery('#aform-upload-name-' + field_id).val('');
aform_jQuery('#aform-upload-remove-' + field_id).hide();
break;
}
this.enable();
},
onError : function(event, queueID, fileObj, errorObj){
switch( errorObj.type ){
case 'File Size':
aform_jQuery("#" + event.target.id + queueID + " .fileName").text("エラー : ファイルサイズオーバー " + fileObj.name);
break;
default:
alert('error!' + errorObj.type);
break;
}
return false;
}
});
}
function remove_upload(field_id){
aform_jQuery('#aform-upload-info-' + field_id).text('');
aform_jQuery('#aform-field-' + field_id).val('');
aform_jQuery('#aform-upload-name-' + field_id).val('');
aform_jQuery('#aform-upload-remove-' + field_id).hide();
Validation.reset($('aform-field-' + field_id));
}
function get_aform_parameter(parts_id, parameter_name){
if( isEmpty(parameter_name) ){
return false;
}
var val = aform$.query.get(parameter_name);
aform_jQuery('#' + parts_id).val(val);
aform_jQuery('#' + parts_id + '-text').text(val);
}
function set_datepicker(parts_id, range_from, range_to, default_value){
init_aform_calendar(parts_id, default_value);
aform$('#' + parts_id).datepicker({
showOn: 'button',
buttonImage: aform.static_uri + 'plugins/AForm/images/calendar.gif',
buttonImageOnly: true,
changeMonth: true,
changeYear: true,
minDate: new Date(range_from, 1-1, 1),
maxDate: new Date(range_to, 12-1, 31),
beforeShow: function(){
var yy = aform$('#' + parts_id + '-yy').val();
var mm = aform$('#' + parts_id + '-mm').val();
var dd = aform$('#' + parts_id + '-dd').val();
if( yy > 0 && mm > 0 && dd > 0 ){
aform$(this).datepicker('setDate', new Date(yy, mm-1, dd));
}
},
onSelect: function() {
var date = aform$(this).datepicker('getDate');
var elm_yy = aform$('#' + parts_id + '-yy');
var elm_mm = aform$('#' + parts_id + '-mm');
var elm_dd = aform$('#' + parts_id + '-dd');
aform$(elm_yy).val(date.getFullYear());
aform$(elm_mm).val(date.getMonth()+1);
aform$(elm_dd).val(date.getDate());
aform$(elm_yy).valid();
aform$(elm_mm).valid();
aform$(elm_dd).valid();
}
});
}
function init_aform_calendar(parts_id, default_value) {
var elm_yy = aform$('#' + parts_id + '-yy');
var elm_mm = aform$('#' + parts_id + '-mm');
var elm_dd = aform$('#' + parts_id + '-dd');
if (aform$(elm_yy).val() != '' || aform$(elm_mm).val() != '' || aform$(elm_dd).val() != '') {
return;
}
var date = new Date();
var yy = date.getFullYear();
var mm = date.getMonth() + 1;
var dd = date.getDate();
if (default_value.match(/([\+\-]\d+)((day|month|year))/)) {
var offset = parseInt(RegExp.$1);
var type = RegExp.$2;
if (type == "day") {
date.setTime(date.getTime() + offset * 60*60*24*1000);
yy = date.getFullYear();
mm = date.getMonth() + 1;
dd = date.getDate();
}
else if (type == "month") {
mm += offset;
if (mm > 12) {
yy += 1;
mm -= 12;
}
if (mm < 1) {
yy -= 1;
mm += 12;
}
}
else if (type == "year") {
yy += offset;
}
// fix date
var check_date = new Date(yy, mm, 0);
if (dd > check_date.getDate()) {
dd = check_date.getDate();
}
}
// set dropdown
aform$(elm_yy).val(yy);
aform$(elm_mm).val(mm);
aform$(elm_dd).val(dd);
}
aform$(document).ready(function(){
aform_set_reserve_events();
});
function aform_set_reserve_events(){
aform$('.aform-reserve-date').each(function(){
aform_set_reserve_plan_list(this);
});
aform$('.aform-reserve-date').change(function(){
aform_set_reserve_plan_list(this);
});
aform$('.aform-reserve-plan-id').each(function(){
aform_set_reserve_option_list(this);
});
aform$('.aform-reserve-plan-id').change(function(){
aform_set_reserve_option_list(this);
});
}
function aform_set_reserve_plan_list(date_parts){
var parts_id;
if( date_parts.id.match(/^(.+)-date$/) ){
parts_id = RegExp.$1;
}
if( !parts_id ){
return;
}
var plan_select = aform$('#'+ parts_id +'-plan-id');
plan_select.empty();
var date_value = aform$(date_parts).val();
var plan_items = '
';
var plans = aformReserveOptionValues[date_value];
aform$(plans).each(function() {
plan_items += '
';
})
plan_select.append(plan_items);
plan_select.trigger("change");
}
function aform_set_reserve_option_list(plan_parts){
var parts_id;
if( plan_parts.id.match(/^(.+)-plan-id$/) ){
parts_id = RegExp.$1;
}
if( !parts_id ){
return;
}
var date_parts = aform$('#'+ parts_id +'-date');
if( !date_parts ){
return;
}
var date_value = aform$(date_parts).val();
var plan_id = aform$(plan_parts).val();
var option_value_select = aform$('#'+ parts_id +'-option-value-id');
option_value_select.empty();
var option_items = '
';
var exists_option = false;
if (date_value && plan_id) {
var plans = aformReserveOptionValues[date_value];
aform$(plans).each(function() {
if (this.id == plan_id) {
var option_values = this['option_values'];
aform$(option_values).each(function() {
option_items += '
';
exists_option = true;
});
}
});
}
option_value_select.append(option_items);
if (exists_option) {
option_value_select.attr('disabled', '');
option_value_select.show();
}else{
option_value_select.attr('disabled', 'disabled');
option_value_select.hide();
}
}
CheckNextStep = {};
CheckNextStep.vars = {};
CheckNextStep.check = function(me, max_length, e) {
var value = aform$(me).val();
if (value.length < max_length) {
return ;
}
// 矢印キー、TAB、Shift の場合は何もしない
var denyKey = [37,38,39,40,9,16];
for (var i = 0 ; i < denyKey.length ; i++) {
if (e.keyCode == denyKey[i]) {
return ;
}
}
value = value.substr(0, max_length); // オーバー分は切る
aform$(me).val(value);
if (aform$(me).attr("id").match(/(\d+)$/)) {
var next_num = parseInt(RegExp.$1,10) + 1;
var next_id = aform$(me).attr("id").replace(/\d+$/, next_num);
aform$("#"+next_id).focus();
} else {
aform$(me).blur();
}
}