function updatePageData(jsonData) {
	for (key in jsonData) {
		pageData[key] = jsonData[key];
	}
}

function updatePageBlocks(jsonDATA) {
	if (jsonDATA && jsonDATA.REPLACEMENTS) {
		for (selector in jsonDATA.REPLACEMENTS) {
			$(selector).html(jsonDATA['REPLACEMENTS'][selector]);
		}
	}
}

function updatePageAddClasses(addClasses) {
	for (selector in addClasses) {
		$(selector).addClass(addClasses[selector]);
	}
}
function updatePageDeleteClasses(removeClasses) {
	for (section in removeClasses) {
		$(selector).removeClass(removeClasses[selector]);
	}
}

function updateFonts() {
	Cufon.replace('h2, h3, h1', {
		fontFamily : 'archer'
	});
	Cufon.replace('.archer_medium, .button, .blue_button', {
		fontFamily : 'archer medium'
	});
	Cufon.replace('.archer_small', {
		fontFamily : 'archer semibold'
	});
	Cufon.replace('.archer_bold', {
		fontFamily : 'archer bold'
	});
}
function updatePageContent(jsonContents) {
	for (selector in jsonContents) {
		$(selector).html(jsonContents[selector]);
	}
}
function updatePageFieldValues(fields) {
	for (selector in fields) {
		$(selector).val(fields[selector]);
	}
}
function ajaxUpdate(jsonDATA) {
	if (jsonDATA) {
		if (jsonDATA.contentReplace) {
			updatePageContent(jsonDATA.contentReplace);
		}
		if (jsonDATA.classAdd) {
			updatePageAddClasses(jsonDATA.classDelete);
		}
		if (jsonDATA.classDelete) {
			updatePageDeleteClasses(jsonDATA.classDelete);
		}
		if (jsonDATA.setData) {
			updatePageData(jsonDATA.setData);
		}
		if (jsonDATA.valueChange) {
			updatePageFieldValues(jsonDATA.valueChange);
		}
	}
}
function addAjaxValidation(formid) {
	var destAction = $(formid).attr('action');
	$(formid + ' input.ajaxVal, select.ajaxVal').unbind('change');
	$(formid + ' input.ajaxVal, select.ajaxVal').change(function() {
		$('#' + this.id + ' + .spin-ajax-loader-box').removeClass('hidden');
		var query = $(formid).serializeArray(), data = {};
		for (i in query) {
			if (isdefined(data[query[i].name])) {
				if (jQuery.isArray(data[query[i].name])) {
					tmp = data[query[i].name];
					tmp.push(query[i].value);
					data[query[i].name] = tmp;
				} else {
					curr = [];
					curr.push(data[query[i].name]);
					curr.push(query[i].value);
					data[query[i].name] = curr;
				}

			} else {
				data[query[i].name] = query[i].value;
			}
		}
		validate(this.id, data, destAction, formid);
	});
}
function addAjaxSubmit(formid, responseObj) {
	var destAction = $(formid).attr('action');
	$(formid + ' input.ajaxSubmit').unbind('click');
	$(formid + ' input.ajaxSubmit').click(function() {
		$('#' + this.id + ' + .spin-ajax-loader-box').removeClass('hidden');
		var query = $(formid).serializeArray(), data = {};
		data[this.name] = this.value;
		for (i in query) {
			if (isdefined(data[query[i].name])) {
				if (jQuery.isArray(data[query[i].name])) {
					tmp = data[query[i].name];
					tmp.push(query[i].value);
					data[query[i].name] = tmp;
				} else {
					curr = [];
					curr.push(data[query[i].name]);
					curr.push(query[i].value);
					data[query[i].name] = curr;
				}

			} else {
				data[query[i].name] = query[i].value;
			}
		}

		validate(this.id, data, destAction, formid, responseObj);
	});
}
function isdefined(variable) {
	return (typeof variable === 'undefined') ? false : true;
}
function validate(fields, formData, destAction, formid, responseObj) {
	formData['AJAX_VALIDATE_FIELDS'] = fields;
	formData['AJAX_VALIDATE'] = 1;
	$.ajax( {		
		type : "POST",
		url : destAction,
		data : formData,
		dataType : 'json',
		success : function(returnData) {
		var data = new Array();
		var errors = 0;
			for (field in returnData.ERRORS) {
				errors++;
				$('input[name=' + field + ']').addClass(
						returnData.ERRORS[field]);
			}
			for (key in returnData.DATA) {
				data[key] = returnData.DATA[key];
				
			}
			for (field in returnData.CORRECT) {
				$('input[name=' + field + ']').removeClass(
						returnData.CORRECT[field]);
			}
			for (section in returnData.HIDE_FIELDS) {
				if (returnData.HIDE_FIELDS[section]) {
					$(section).addClass('hidden');
					$(section + ' select').attr('disabled', true);
					$(section + ' input').attr('disabled', true);
				} else {
					$(section).removeClass('hidden');
					$(section + ' input').removeAttr('disabled');
					$(section + ' select').removeAttr('disabled');
				}
			}
			for (section in returnData.CSS_REMOVE_CLASS) {
				$(section).removeClass(returnData.CSS_REMOVE_CLASS[section]);
			}
			for (section in returnData.CSS_ADD_CLASS) {
				$(section).addClass(returnData.CSS_ADD_CLASS[section]);
			}
			for (section in returnData.UPDATE_HTML) {
				$(section).html(returnData.UPDATE_HTML[section]);
			}
			for (section in returnData.UPDATE_VALUES) {
				$(section).val(returnData.UPDATE_VALUES[section]);
			}
			for (section in returnData.DISABLE_FIELDS) {
				$(section + ' input,select').attr('enabled', false);
			}
			for (field in returnData.ENABLE_FIELDS) {
				$(section + ' input,select').attr('enabled', true);
			}
			updatePageBlocks(returnData.CSS_REPLACEMENTS);
//			updatePageData(data.UPDATE_VALUES);
			addAjaxValidation(formid);
			updateFonts();
			$('.spin-ajax-loader-box').addClass('hidden');
			if(typeof responseObj !== 'undefined'){
				if(errors > 0){
					responseObj.errors(data);
				}else{
					responseObj.success(data);
				}
			}
		},
		error : function(XHR, msg, error) {
			$('.spin-ajax-loader-box').addClass('hidden');
			if(responseObj != undefined){
				responseObj.fail();
			}
		}
	});
}
