var xFieldList = new Array();
var xValid = Class.create();

xValid.prototype = {
	initialize: function(field,pars){
		this.objId	= $('error_'+field.name);
		this.field	= field;
		this.pars	= pars;
		// necessary to handle radio buttons and checkboxes
		this.url	= '?get=x_validate.'+this.field.name
		this.fieldProc = this.processEvent.bind(this);
	},
	processEvent: function(){
		//alert(this.url);
		new Ajax.Updater( this.objId, xTimeStamp(this.url), { method: 'post', parameters: this.pars, 
			onComplete : xHandleValidation.bind(this), 
			onFailure : xHandleError, asynchronous : true, evalScripts : true});
	}
};

function xHandleValidation(req){
	if ($j.trim($j('#error_'+this.field.name).html()) != ''){
		$j('#error_'+this.field.name).parent().removeClass('hideError');
		try{liquid();}
		catch(e){}
	} else {
		$j('#error_'+this.field.name).parent().addClass('hideError');
	}
}

function xHandleError(req){
	//alert(this.pars);
	alert('error occurs');
	if ($j.trim($j('#error_'+this.field.name).html()) != ''){
		
		$j('#error_'+this.field.name).parent().addClass('hideError');
	}
}

function xValidate(){
	var fName = arguments[0].name;
	var pValue = "&" + fName + "=" + xGetFieldValue(arguments[0]);
	for(var ii = 0;ii < xFieldList.length; ii++ ){
		var xTemp = xFieldList[ii].split('.');
		if(xTemp[1].toLowerCase() == fName.toLowerCase()){
			pValue = pValue + "&xMethod=" + xTemp[0];
			break;
		} 
	}
	if (arguments.length > 1){
		for (var i = 1; i< arguments.length;i++){
			var temp = $(arguments[i]);
			if (temp != undefined){
				if (temp.name != undefined){
		   			pValue = pValue + "&" + temp.name + "=" + xGetFieldValue(temp);
				} else {
					pValue = pValue + "&" + temp[0].name + "=" + xGetFieldValue(temp);
				} 
			}
		}
	}
	var testThis = new xValid(arguments[0],pValue);
	testThis.processEvent();
}

function xGetFieldValue(){
	var rExp = /[^a-zA-Z0-9]*$/;
	var gValue = '';
	if (arguments[0].type == undefined){
		var tempgValue = '';
		for (iT=0;iT<arguments[0].length;iT++ ){
			if (arguments[0][iT].checked){
				tempgValue = tempgValue +'"'+ arguments[0][iT].value +'"';
			}
		}
		tempgValue = tempgValue.replace(/""/g,',');
		tempgValue = tempgValue.replace(/"/g,'');
		tempgValue = tempgValue.replace(rExp,'');
		tempgValue = tempgValue.replace(/&/g,'');
		gValue = tempgValue;
	} else if ((arguments[0].type == 'checkbox') || (arguments[0].type == 'radio')){
		gValue = xGetRadioAndCheckBoxes(arguments[0]);
	}else if ((arguments[0].type == 'select-one') || (arguments[0].type == 'select-multiple')){
		gValue = xGetSelectedSelect(arguments[0]);
	} else {
		gValue = arguments[0].value;
		gValue = gValue.replace(rExp,'');
		gValue = gValue.replace(/&/g,'');
	}
	return gValue;
}

function xGetRadioAndCheckBoxes(fGroup){
	var returnValue = '';
	var fObj = eval('document.form.'+fGroup.name);
	
	if (fObj.length){
		for (rdidx=0;rdidx<fObj.length;rdidx++){
			if (fObj[rdidx].checked){
				var returnValue = returnValue +'"'+ fObj[rdidx].value +'"';
			}
		}
	}else{
		if (fObj.checked){
			var returnValue = returnValue +'"'+ fObj.value +'"';
		}
	}
	var returnValue = returnValue.replace(/""/g,',');
	var returnValue = returnValue.replace(/"/g,'');
	return returnValue;
}

function xGetSelectedSelect(multSelect){
	var returnValue = '';
	for (slidx=0;slidx<multSelect.length;slidx++){
		if ((multSelect.options[slidx].selected == true) && (multSelect.options[slidx].value != '')){
			var returnValue = returnValue +'"'+ multSelect.options[slidx].value +'"';
		}
	}
	var returnValue = returnValue.replace(/""/g,',');
	var returnValue = returnValue.replace(/"/g,'');
	return returnValue;
}
var xLoader = Class.create();

xLoader.prototype = {
	initialize: function(){
		this.objId	= arguments[0];
		this.url	= arguments[1];
		this.pars	= arguments[2];
		this.bindevent = this.processEvent.bind(this);
	},
	processEvent: function(){
		alert(this.pars);
		new Ajax.Updater( this.objId, timeStamp(this.url), { method: 'post', parameters: this.pars, 
			onComplete : xHandleValidation.bind(this), 
			onFailure : xHandleError, asynchronous : true, evalScripts : true});
	}
};

function xLoad(target,url,parameters){
	var loadThis = new xLoader(target,url,parameters);
	loadThis.processEvent();
}

xTimeStamp = function(urlString){
	var tms = new Date()
	return urlString + '&ajaxTS=' + Date.parse(tms);
}

//-->