var SignUp = new Object();
SignUp.initConfig=function(soruceConfig,tagetConfig){
	var config = eval(soruceConfig);
	if(typeof config != "undefined"){
		for(var p in config){
			if(typeof tagetConfig[p] != "undefined"){
				tagetConfig[p] = config[p];
			}
		}
	}
};
 SignUp.Condition=function(configParam){
 	SignUp.Condition.prototype.url = configParam.url;
};
SignUp.textAreaMaxLength = function(formId,textAreaName,maxLength){
  function verifyCharCode(charCode,event){
	if(event.shiftKey){
		return false;
	}else{  
	  	return Event.KEY_TAB == charCode || 
	  		   Event.KEY_LEFT == charCode ||
	  		   Event.KEY_UP == charCode ||
	  		   Event.KEY_RIGHT == charCode ||
	  		   Event.KEY_DOWN == charCode ||
	  		   Event.KEY_DELETE == charCode ||
	  		   Event.KEY_HOME == charCode ||
	  		   Event.KEY_BACKSPACE == charCode;
 	}
  };
  var textArea = $(""+formId).elements[textAreaName];
 
  Event.observe(textArea,"change",function handleChage(event){
  		if (textArea.value != null && textArea.value.length > maxLength) {
  			textArea.value = textArea.value.substr(0,maxLength);
  		}
  });
  
  Event.observe(textArea,"keypress",function handleChage(event){
  		var charCode = event.charCode || event.keyCode;
  		if ((textArea.value.length >= maxLength) && !verifyCharCode(charCode,event)) {
			event.stop();
			return false;
		}
  });
  
}
SignUp.Condition.disabledElement=function(els,flag){
	if(els.length>0){
		for(var i=0;i<els.length;i++){
			if(els[i].disabled!="undefined"){
				els[i].disabled=flag;
			}
			var cEls = els[i].childElements();
			SignUp.Condition.disabledElement(cEls,flag);
		}
	}
}
SignUp.Condition.prototype={
	handleResponse:function(response){
		var responseObj = eval(response.responseText);
		for (var i = 0; i < responseObj.length; i++){
			var element = $("" + responseObj[i].questionId);
			if (element){
				responseObj[i].hidden?element.hide() : element.show();
				//section
				if(element.hasClassName('section')){
					var eles = element.childElements();
					for(var j = 0;j<eles.length;j++){
						if(eles[j].hasClassName('question')){
							responseObj[i].hidden?eles[j].hide() : eles[j].show();
						}
					}
				}
				if (!responseObj[i].hidden){
					SignUp.Condition.disabledElement(
						element.childElements(), responseObj[i].readOnly);
				}
			}
		}
		hideLoadPanel();
	},
	changeOption:function(questionId, event, isClickElement) {
	   createLoadPanel();
	   showLoadPanel();
		var el = Event.element(event);
		var selected = isClickElement?el.checked:el.selected;
		var optionId=el.value;
		var type=isClickElement?el.type:el.up(0).type;
		var optionIds = optionId.split("_");
		new Ajax.Request(
			this.url + "?ajax=true", {
				parameters: 'conditionQuestionID=' + questionId + '&condtionOptionID=' 
					+ optionIds[1]+'&selected=' + selected 
					+ '&optionType=' + type,
				asynchronous: true,
				method:'post',
				onSuccess:this.handleResponse
			});
	},
	changeListOption:function(questionId, event) {
	   createLoadPanel();
	   showLoadPanel();
		var el = Event.element(event);
		var params = 'conditionQuestionID=' + questionId + "&optionType=" + el.type;
		for (var optionIndex =  0 ; optionIndex < el.options.length; optionIndex++) {
			if (el.options[optionIndex].selected){
				var optionIds = el.options[optionIndex].value.split("_")[1];
				params +='&listConditionOptionID=' + optionIds;
			}
		}
		new Ajax.Request(
			this.url + "?ajax=true", {
				parameters: params,
				asynchronous: true,
				method: 'post',
				onSuccess: this.handleResponse
			});
	}
};

SignUp.SetAnswer = function(configParam){
	SignUp.initConfig(configParam,this);	
};
SignUp.SetAnswer.prototype={
	elName:"",
	elements:function(){
		return document.getElementsByName(this.elName);
	},
	setTextValue:function(value){
		try{
			this.elements()[0].value=value;
		}catch(e) {
		}
	},
	setRadioValue:function(optionId, value){
		var els = this.elements();
		if(els && els.length > 0) {
    		if(optionId > -1) {
    			var openend = document.getElementsByName(els[0].name + "_option_" + optionId);
    			if(openend.length > 0) {
    				openend[0].value = value;	
    			}
    		}
    		for(var i=0 ; i<els.length ; i++) {
    			if(els[i].value == value) {
    				els[i].checked = true;
    			}
    			if(optionId > -1 && els[i].value == ("option_" + optionId)) {
    				els[i].checked = true;
    			}
    		}		
		}
	},
	setCheckboxValue:function(answers){
		var els = this.elements();
		if(els && els.length > 0) {
    		for(var i =0 ; i<answers.length ; i++) {
    			var optionId = answers[i][0];
    			var value = answers[i][1];
    
    			if(optionId > -1) {
    				var openend = document.getElementsByName(els[0].name + "_option_" + optionId);
    				if(openend.length > 0) {
    					openend[0].value = value;	
    				}
    			}
    		}
    		
    		for(var i =0 ; i<answers.length ; i++) {
    			var optionId = answers[i][0];
    			var value = answers[i][1];
    			
    			for(var j=0 ; j<els.length ; j++) {
    				if(els[j].value == value) {
    					els[j].checked = true;
    				}
    				
    				if(optionId > -1 && els[j].value == ("option_" + optionId)) {
    					els[j].checked = true;
    				}				
    			}
    		}
		}
	},
	setDropDownValue:function(values){
	   if(this.elements() && this.elements().length > 0) {
    		var options = this.elements()[0].options;
    		for(var i=0; i<options.length ; i++) {
    				for(var j=0; j<values.length ; j++) {
    					if(options[i].value == values[j]) {
    						options[i].selected = true;
    					}
    				}
    		}
	   }
	},
	setRankingValue:function(container, values) {
		if(values.length == 0) {
			return;
		}
		var container = document.getElementById(container);
		var unSortedArray = new Array();
		var sortedArray = new Array();
		for(var i=0 ; i<container.childNodes.length ; i++) {
			if(container.childNodes[i].tagName != undefined) {
				unSortedArray.push(container.childNodes[i]);
			}
		}
		for(var i=0 ; i<unSortedArray.length ; i++) {
			container.removeChild(unSortedArray[i]);
		}
		for(var i=0 ; i<values.length ; i++) {
			for(var j=0 ; j<unSortedArray.length ; j++) {
				if(unSortedArray[j].id == values[i]) {
					container.appendChild(unSortedArray[j]);
				}
			}
		}
	}
};

SignUp.SortableComponent = function(configParam) {
	SignUp.initConfig(configParam,this);
};

SignUp.SortableComponent.prototype = {
	container:0,
	order:function() {
		Sortable.create(this.container,
		{
			dropOnEmpty:true,
			containment:[this.container],
			constraint:false
		}
		);
	}
};

SignUp.LocaleComponent = function(configParam){
	SignUp.initConfig(configParam,this);	
};

SignUp.LocaleComponent.prototype = {
	id:0,
	formId:0,
	component:function() {
		return document.getElementById(this.id);
	},
	getForm:function() {
		return document.getElementById(this.formId);
	},
	options:function() {
		return this.component().options;
	},
	regesiter:function(formId, action) {
		var object = this.component();
		Event.observe(object,"change", function() {
			var form = document.getElementById(formId);
			form.action = action;
			form.submit();
		});
	}
}
