var CONST_FIELD_TEXT = 1 ;
var CONST_FIELD_TEXTAREA = 2 ;
var CONST_FIELD_CHECKBOX = 3 ;
var CONST_FIELD_RADIO = 4 ;
var CONST_FIELD_SELECT = 5 ;
var CONST_FIELD_DIV = 7 ;
var CONST_FIELD_HTML_EDITOR = 13;
var CONST_FIELD_PASSWORD = 14;
var CONST_CONFIRM_PWD=17; //sadece client tarafında şifreyi kontrol etmek amacıyla eklenen bir alan. 

var CONST_DS_USER=1; //Kullanıcı girişi
var CONST_DS_FORM_DATA=2; //Form verisi
var CONST_DS_DEPEND_ON_FIELD=3; //Form alanına bağlı
var CONST_DS_FORMULA=4; //Formül
var CONST_DS_DEP_ON_FIELD_WITH_COND=5; //Form alanına şartlı bağlı

var CONST_FORM_DATA_OPEN=1;
var CONST_FORM_DATA_CLOSE=2;
var CONST_FORM_DATA_WAIT=3;
var CONST_FORM_DATA_AMBIGUOUS=4;

var CONST_FORMULA_ORTALAMA = "ORTALAMA";

function ClassDesign(){
	this.myAccountForm=false;
	this.designName="";
	this.description="";
	this.adminSide;
	this.name="";
	this.title="";
	this.formID=0;
	this.recID=0; //Formla ilgili verilerin kaydedildiği map id. map tablosunda....
	this.recordNumber=0;
	this.mainFormRecID=0;
	this.mainCategoryID=0;
	this.loginForm=false;
	this.formulaName="";
	this.colCount=1;
	this.formStatu=1; //0=tanımsız, 1=açık, 2=beklemede, 3=kapalı
	this.fileManagmentActive=false; //Dosya yöneticisi durumu
	this.htmlOutput=false;
	this.messagesWindowOpen=false; //Mesaj penceresinin aktif olup olmayacağını gösterir.	
	this.afterSaveForm=1; //1-form editlenemez, 2-alanları boşalt, 3-birşey yapma 
	this.sourceFormID=0;
	this.informOnInsert=false;
	this.informOnInsertToEmail="";
	this.informOnUpdate=false;
	this.informOnUpdateToEmail="";
	this.informOnDelete=false;
	this.informOnDeleteToEmail="";
	
	this.elements = new Collection();
	this.formStyle = new ClassStyle(); //Forma uygulanacak stil	
	
	//Süreç formlarında kullanılıyor.
	this.processID=0;
	this.mainFormID=0;
	this.relationFieldID=0;
	
	this.connectionField=null; //Süreç ve ana formda bağlantıyı sağlayan alan
	
	this.myURL=""; //form hangi url den elde edilmiş
	this.key="form_"+this.formID;
	this.categoryID=0;
	this.insertRight=false;
	
	this.getFieldObjByID=function (fieldID){
		for(var ii=0;ii<this.elements.size();ii++){
			element=this.elements[ii];
			if (element.elementID==fieldID){
				return element;
			}
		}
	}

	this.getFieldByMainFieldID=function (mainFieldID){
		for(var ii=0;ii<this.elements.size();ii++){
			element=this.elements[ii];
			if (element.mainFieldID==mainFieldID){
				return element;
			}
		}
	}
	
	
	this.getJsonStrForStore=function (){
		var jsonStr="{name:'recID'},{name:'statuID'},";
		for(var ii=0;ii<this.elements.size();ii++){
			element=this.elements[ii];
			if (element.elementType!=CONST_FIELD_PASSWORD && !element.autoChooseFromSession){
				jsonStr+=element.getJsonStrForStore()+",";
			}
		}
		
		return "["+jsonStr.substr(0,jsonStr.length-1)+"]";
	}
	
	this.getJsonStrForGrid=function (withStatu){
		var jsonStr="";
		var element;
		
		for(var ii=0;ii<this.elements.size();ii++){
			element=this.elements[ii];
			if (!element.autoChooseFromSession)
				jsonStr+=element.getJsonStrForGrid()+",";
		}

		jsonStr=jsonStr.substr(0,jsonStr.length-1);
		if (withStatu==null || withStatu) 
			jsonStr="[{id:'statuID',dataIndex:'statuID',width:45,renderer:getStatu, header:'Durum',sortable:true},"+jsonStr+"]";
		else
			jsonStr="["+jsonStr+"]";
		
		return jsonStr;
	} 
	
	//her elementin içinde editable propertysi var. ancak tüm elementler editlenemez ya da editlenebilir şeklinde istenirse
	//buradaki parametreyi true ya da false yapıyoruz.
	//myAccountForm hesabıma tıklandığı için şifre alanlarını getirmiyoruz.
	this.generateHTML = function (elementsEditable){
		var html="";
		var element;
		var columnCounter=1;
		var confirmPwdElement;
		var designMode=false;
		
		for(var ii=0;ii<this.elements.size();ii++){
			element=this.elements[ii];
			designMode=element.designMode;
			//tasarım modu dışındaysa.
			if (element.designMode==false){
				//Eğer şifre alanına bir doğrulama eklenmemiş ise onu ekliyoruz.
				//şifre alanı ve bundan sonra başka bir alan yoksa doğrulama alanı ekle
				if (element.elementType==CONST_FIELD_PASSWORD && this.elements[ii+1]==null){
					confirmPwdElement=Object.clone(element);
					confirmPwdElement.name=confirmPwdElement.name+" (Tekrar)";
					confirmPwdElement.elementType=CONST_CONFIRM_PWD;
					confirmPwdElement.elementID="pwdAgain"; //ID yi değiştirme
					confirmPwdElement.index="";
					this.elements.insertAt(ii+1,confirmPwdElement);
					break;
				}
				//daha önce bir doğrulama alanı eklenmişse yenisini ekleme
				else if (element.elementType==CONST_FIELD_PASSWORD && this.elements[ii+1].elementType!=CONST_CONFIRM_PWD){
					confirmPwdElement=Object.clone(element);
					confirmPwdElement.name=confirmPwdElement.name+" (Tekrar)";
					confirmPwdElement.elementType=CONST_CONFIRM_PWD;
					confirmPwdElement.elementID="pwdAgain"; //ID yi değiştirme;
					confirmPwdElement.index="";
					this.elements.insertAt(ii+1,confirmPwdElement);
					break;
				}
			}
		}
		
		var trIndex=0;
		for(var ii=0;ii<this.elements.size();ii++){
			element=this.elements[ii];
			element.formID=this.formID;
			this.myAccountForm=false;
			
			if (this.myAccountForm==false
				|| (this.myAccountForm && element.elementType!=CONST_FIELD_PASSWORD && element.elementType!=CONST_CONFIRM_PWD)){
				//Süreçlerdeki bağlantı alanı ise veya alan otomatik sessiondan gelecek ise bunu geç
				if ((element.elementID!=this.relationFieldID || element.elementID==0) && !element.autoChooseFromSession){ 
					if (this.recID==0)
						element.displayValue="";
						
									
					//Eger editable parametresi geçmiş ise bunu objelere set et.
					if (elementsEditable!=null){
						element.editable=elementsEditable;
					}
					element.formKey=this.formKey;
					if (this.colCount==1){
						html+=element.GetHTML(false,this.colCount,this.recID,++trIndex,this.insertRight);
						element.trIndex=trIndex;
					}
					else if (this.colCount>=2){
						if (columnCounter==1){
							if (!element.isOneRow){
								trIndex++;
								html+="<tr id='trForm_"+trIndex+"'>"+element.GetHTML(true,this.colCount,this.recID,trIndex,this.insertRight);
								element.trIndex=trIndex;
								columnCounter++;
							}
							else{
								html+=element.GetHTML(true,this.colCount,this.recID,this.insertRight)+"</tr>";
								element.trIndex=trIndex;
								columnCounter=1; //Tek satırlık elementten sonra sayaçı yeniden başlat.
							}
						}
						else if (columnCounter==this.colCount){
							html+=element.GetHTML(true,this.colCount,this.recID,this.insertRight)+"</tr>";
							element.trIndex=trIndex;
							columnCounter=1;
						}
						else{
							trIndex++;
						
							//Eğer bir önceki elementte tek satır istenmişse yeni bir tr tagı aç. Çünkü tr tagı kapanmış demektir.
							if (this.elements[ii-1].isOneRow) html+="<tr id='trForm_"+trIndex+"'>";
							element.trIndex=trIndex;
							html+=element.GetHTML(true,this.colCount,this.recID,this.insertRight);
							columnCounter++;
						}
					}
				}
			}
		}
		
		var formCssText="";
		if (designMode){
			formCssText=this.formStyle.cssText.toLowerCase().replace("display:none","").replace("display: none","");
		}
		else formCssText=this.formStyle.cssText;
		
		html="<form id='form_"+this.formID+"'><table align='center' width='100%' style='"+formCssText+"' cellpadding=\"0\" cellspacing=\"0\">"+html+"</table>";
	
		if (this.htmlOutput && element.designMode==false){
			html+="<table>";
			html+="<tr><td align='center'><button onclick='showFormAsHtmlOutput("+this.formID+")'>Tasarım Çıktısını Göster</button></td></tr>";
			html+="</table>";
		}
		//extJs de Insertion ile ekleme yapamadığımızdan(anlaşılmayan bir sorun çıkarıyor) bizde divCommon elementi ekledik.
		//Süreçlerde bağlantı alanının id sini bir hiidden içinde buraya koyuyoruz.
		html+="<div style='display:none;' id='divCommon_"+this.formID+"'></div></form>";
		
		return html;
	}
	
	this.removeForm = function(){
		var uniqeID;
		for(var ii=0;ii<this.elements.size();ii++){
			uniqeID="trForm"+this.elements[ii].elementID;
			if ($(uniqeID)) $(uniqeID).remove();
		}		
	}
	
	this.initialize = function _initialize(){
		for(var ii=0;ii<this.elements.size();ii++){
			//Süreç formlarında bağlantı alanı dışındakilerm initialize et.
			//ve hesabım formu çağrılmışsa şifre alanı dışındakileri initialize et.
			if (
				(this.elements[ii].elementID!=this.relationFieldID && !this.elements[ii].autoChooseFromSession) &&
				(this.myAccountForm==false || (this.myAccountForm && element.elementType!=CONST_FIELD_PASSWORD && element.elementType!=CONST_CONFIRM_PWD))
				)
			{
				this.elements[ii].initialize();
			}
		}
		this.getAllFieldsData();
		this.calculateFieldValues();
		this.checkFieldsViewConditions();
	}
	
	this.calcutaleOrtalamaFunction=function _calculateOrtalamaFunction(formula){
		var ortalamaIndex=formula.indexOf("ORTALAMA");
		if (ortalamaIndex==-1) return formula;
		
		var index=ortalamaIndex+CONST_FORMULA_ORTALAMA.length+1;
		var righParenthesesIndex=formula.indexOf(")",index);
		var functionParams=formula.substr(index,righParenthesesIndex-index).split("\"");
		
		var fieldNames;
		var operator;
		var compareValue;
		
		fieldNames=functionParams[1];
		if (functionParams[3]!=null) operator=functionParams[3];
		if (functionParams[5]!=null) compareValue=functionParams[5];
		
		var arrFieldNames=fieldNames.split(",");
		
		var element;
		var result=0;
		var fieldCounter=0;
		var condition; //Şartı tutacak değişken
		
		for(var kk=0;kk<arrFieldNames.length;kk++){
			for(var ii=0;ii<this.elements.size();ii++){
				element=this.elements[ii];
				if (operator!=null)
					eval('condition=parseFloat("0"+$("field_"+element.elementID+"_"+element.index).value)'+operator+compareValue);	
				
				if (element.shortName==arrFieldNames[kk] && ((operator!=null && condition) || operator==null)){
					result+=parseFloat("0"+$("field_"+element.elementID+"_"+element.index).value);
					fieldCounter++;
				}
			}
		}
		if (fieldCounter>0){
			result=(result/fieldCounter)*100;
			result=Math.round(result)/100;
		}
		
		functionStr=formula.substr(ortalamaIndex,righParenthesesIndex-ortalamaIndex+1);
		formula=formula.replace(functionStr,result);
		
		ortalamaIndex=formula.indexOf("ORTALAMA");
		if (ortalamaIndex>-1){
			formula=this.calcutaleOrtalamaFunction(formula);
		}
		
		return formula;
		
	}
	
	this.checkFieldsViewConditions = function _checkFieldsViewConditions(){
		
		for(var ii=0;ii<this.elements.size();ii++){
			element=this.elements[ii];
			var viewConditionStr="";
			for (var kk=0;kk<element.fieldViewConditions.valueList.size();kk++){
				var condition=element.fieldViewConditions.valueList[kk];
				if (condition.conditionType==1){
					var fieldID=condition.fieldID;
					var conditionValue=condition.conditionValue;
					if ($('field_'+fieldID))
						viewConditionStr+="$('field_"+fieldID+"').value=="+conditionValue+" ";
					else viewConditionStr+="false ";
				}
				else viewConditionStr+=condition.conditionValue.replace("VEYA","||").replace("VE","&&")+" ";
			}
		
			if (viewConditionStr!=""){
				eval("var result=("+viewConditionStr+");");
				if (result)
					$("trForm_"+element.trIndex).style.display="";
				else
					$("trForm_"+element.trIndex).style.display="none";
				
			}
		}
		
	}
	
	this.calculateFieldInGrid= function (grid){
		var element;
		
		var selectedCell=grid.getSelectionModel().getSelectedCell();
		if (selectedCell==null) return;
		
		var selectedRow=selectedCell[0];
		var selectedCol=selectedCell[1];
		
		var columnModel=grid.getColumnModel();
		var store=grid.getStore();
		
		for(var ii=0;ii<this.elements.size();ii++){
			element=this.elements[ii];
			if (element.formula.trim()!=""){
				var formula=element.formula;
			
				var arrFormulaField = formula.split("#"); //Alan isimleri #Alan# şeklinde yazılması gerekiyor.
				var fieldStoreID="";
				for (var kk=0;kk<arrFormulaField.length;kk++){
					//Alan isimler kuralına -formul kuralına uygun biçimde yazılmış ise- tek sayılı array indexlerinde oluyor.
					if ((kk%2)==1){ //eğer tek sayı ise formul alanı hangi elemente ait bul.
						for (var jj=0;jj<this.elements.size();jj++){
							if (this.elements[jj].formulaName==arrFormulaField[kk]){
								if (this.elements[jj].editable){
									//fieldStoreID=columnModel.getColumnId(selectedCol);
									fieldStoreID="f_"+this.elements[jj].elementID;
									value=store.data.items[selectedRow].data[fieldStoreID];
								}
								else value=this.elements[jj].displayValue;
								
								value=parseFloat("0"+value,10);
								var valueStr="parseFloat("+value+")"; 
								formula=formula.replace("#"+arrFormulaField[kk]+"#",valueStr);
							}
						}
					}
				}
				
				//Eğer alt form hesaplaması değilse...
				if (formula.indexOf("TOPLA")==-1)
					element.displayValue=eval("formatCurrency("+formula+")");
								
				fieldStoreID="f_"+element.elementID;
				if (element.editable){
					//formatCurrency common.js içinde tanımlı
					//if (element.validationType!="currency_with_symbol")
						//formula = "store.data.items[selectedRow].data['"+fieldStoreID+"']=formatCurrency("+formula+","+element.currencyID+");";
					//else
					formula = "store.data.items[selectedRow].data['"+fieldStoreID+"']="+formula+";";
				}
				
				try{
					eval(formula);
					grid.getView().refresh();
				}
				catch(err){}
			}
		}		
	}
	
	this.calculateFieldValues = function _calculateFieldValues(){
		var element;
		
		for(var ii=0;ii<this.elements.size();ii++){
			element=this.elements[ii];
			if (element.formula.trim()!=""){
				var formula=element.formula;
				//formula=this.calcutaleOrtalamaFunction(element.formula);
			
				var arrFormulaField = formula.split("#"); //Alan isimleri #Alan# şeklinde yazılması gerekiyor.
				
				for (var kk=0;kk<arrFormulaField.length;kk++){
					//Alan isimler kuralına -formul kuralına uygun biçimde yazılmış ise- tek sayılı array indexlerinde oluyor.
					if ((kk%2)==1){ //eğer tek sayı ise formul alanı hangi elemente ait bul.
						for (var jj=0;jj<this.elements.size();jj++){
							if (this.elements[jj].formulaName==arrFormulaField[kk]){
								if (this.elements[jj].editable){
									var formElement=$("field_"+this.elements[jj].elementID);
									if (formElement!=null){
										if (formElement.tagName=="INPUT")
											value=formElement.value;
										else value=formElement.innerHTML;
									}
								}
								else value=this.elements[jj].displayValue;
								
								if (value!=null){
									value=value.toString().replace(".",""); //Binlik ayıraçlarını at ve float olarak çevir
									value=value.toString().replace(",","."); // virgul olan noktalık ayıracanı nokta yap.çünkü js standartı bu.
								}
								value=parseFloat("0"+value,10);
								var valueStr="parseFloat("+value+")"; 
								formula=formula.replace("#"+arrFormulaField[kk]+"#",valueStr);
							}
						}
					}
				}
				var currency="";
				if (element.validationType=="currency_with_symbol")
					currency=arrCurrency[element.currencyID];
					
				//Eğer alt form hesaplaması değilse...
				if (formula.indexOf("TOPLA")==-1)
					element.displayValue=eval("formatCurrency("+formula+")");
				
				if (element.editable){
					//formatCurrency common.js içinde tanımlı
					if (parseInt(element.elementType,10)==CONST_FIELD_TEXT){
						formula = "$('field_"+element.elementID+"').value=formatCurrency("+formula+");";
					}
					else if (parseInt(element.elementType,10)==CONST_FIELD_DIV){
						formula = "$('field_"+element.elementID+"').innerHTML=formatCurrency("+formula+");";
					}					
				}
				else{
					formula = "$('field_"+element.elementID+"').innerHTML=formatCurrency("+formula+") "+currency+";";
				}				
				try{
					eval(formula);
				}
				catch(err){}
			}
		}		
	}
	
	//Eğer bu bir login formu ise kesinlikle şifre ve e-posta alanıda eklenmeli.
	//Bu fonksiyon bu zorunluluğun kontrolünü yapar.
	this.checkLoginFormRequirement = function _checkLoginFormRequirement(){
		var passwordFieldCount=0;
		var emailFieldCount=0;
		var userNameFieldCount=0;
		var element;

		if (design.loginForm){
			for(var ii=0;ii<design.elements.size();ii++){
				element=design.elements[ii];
				if (parseInt(element.elementType,10) == CONST_FIELD_PASSWORD)
					passwordFieldCount++;
				else if (element.userNameField==true && element.validationType=='email'){
					userNameFieldCount++;
					emailFieldCount++;
				}
				else if (element.userNameField==true)
					userNameFieldCount++;
				else if (element.validationType=='email')
					emailFieldCount++;
			}
		
			if (passwordFieldCount==0){
				alert("Sisteme giriş yapılacak formlarda bir tane şifre alanı eklemeniz gerekmektedir!");
				return false;
			}
			else if (passwordFieldCount>1){
				alert("Formda birden fazla şifre alanı tespit edildi.Şifre alan sayısı en fazla bir olabilir!");
				return false;
			}
	
			if (userNameFieldCount==0){
				alert("Sisteme giriş yapılacak formlarda bir tane alanı kullanıcı adı olarak belirlemeniz gerekmektedir!");
				return false;
			}
			else if (userNameFieldCount>1){
				alert("Sisteme giriş yapılacak formlarda kullanıcı adı alanı olarak birden fazla  belirlenemez!!");
				return false;
			}
			
			if (emailFieldCount==0){
				var message="Formunuzda bir eposta alanı tespit edilemedi.Eposta doğrulama,şifre sıfırlama,form eposta gönderme ve yetkilendirme gibi işlemlerde eposta alanları kullanılmaktadır.Formunuzu yinede eposta alanı olmadan kaydetmek istiyor musunuz?"
				return confirm(message);
			}
		}
		
		return true;
	}
	
	this.GenerateXML = function _generateXML(){
		
		var xml="<XML_DATA>";
		var element;
		
		xml+="<DESIGN LOGIN_FORM='"+this.loginForm+"' FORM_STYLE_ID='"+this.formStyle.styleID+"' DEFAULT_FORM_VALUE_STATU='"+this.formStatu+"' "; 
		xml+="DESCRIPTION='"+this.description+"' TITLE='"+this.title+"' FORMULA_NAME='"+this.formulaName+"' ";
		xml+="INFORM_ON_INSERT='"+this.informOnInsert+"' INFORM_ON_INSERT_TO_EMAIL='"+this.informOnInsertToEmail+ "' ";
		xml+="INFORM_ON_UPDATE='"+this.informOnUpdate+"' INFORM_ON_UPDATE_TO_EMAIL='"+this.informOnUpdateToEmail+ "' ";
		xml+="INFORM_ON_DELETE='"+this.informOnDelete+"' INFORM_ON_DELETE_TO_EMAIL='"+this.informOnDeleteToEmail+ "' ";
		xml+="AFTER_SAVE_FORM='"+this.afterSaveForm+"' SOURCE_FORM_ID='"+this.sourceFormID+"' HTML_OUTPUT='"+this.htmlOutput+"' ";
		xml+="COLUMN_COUNT='"+this.colCount+"' FORM_ID='"+this.formID+"' NAME='"+this.designName+"' FILE_MANAGMENT_ACTIVE='"+this.fileManagmentActive+"'>";
		
		xml+="<ELEMENTS>";
		for(var ii=0;ii<design.elements.size();ii++){
			element=design.elements[ii];
			xml+="<ELEMENT ID='"+element.elementID+"' FORMULA_NAME='"+element.formulaName+"' NAME='"+element.name+"' DESC='" + element.description.replace(/\r\n/g,"(br)") + "' REQUIRED='" + element.required + "' ";
			xml+="LINE_AREA_STYLE_ID='"+element.lineAreaStyle.styleID+"' IS_ONE_ROW='"+element.isOneRow+"' COL_SPAN='"+ element.colSpan+"' AUTOMATIC_CHOOSE='"+element.automaticChoose+"' AUTO_COMPLETE='"+element.autoComplete+"' ";
			xml+="READ_ONLY='"+element.readOnly+"' HEAD_AREA_STYLE_ID='"+element.headAreaStyle.styleID+"' DATA_AREA_STYLE_ID='"+element.dataAreaStyle.styleID+"' ELEMENT_STYLE_ID='"+element.elementStyle.styleID+ "' ";
			xml+="FORMULA='" + element.formula.replace(/\r\n/g,"(br)")+"' TYPE='" + element.elementType + "' STYLE='" + element.cssText + "' VALUE='" + element.elementValue +"' ";
			xml+="ARRANGE='" + element.arrange + "' DATA_SOURCE='"+ element.dataSource + "' MAIN_FORM_ID='"+element.mainFormID+"' MAIN_FIELD_ID='"+element.mainFieldID+"' MAIN_FIELD_INDEX='"+element.mainFieldIndex+"' ";
			xml+="ONLINE_TEST_POINT='" + element.onlinePointField + "' ONLINE_TEST_ANSWER='"+ element.onlineAnswerField + "' ONLINE_TEST_QUESTION='"+element.onlineQuestionField+"' ONLINE_TEST_OPTIONS='"+element.onlineOptionsField+"' ";
			xml+="REQUESTED_FIELD_ID='"+element.requestedFieldID+"' SHOW_ACTIVE_RECORDS='"+element.showActiveRecords +"' SHOW_PASSIVE_RECORDS='"+element.showPassiveRecords +"' IS_NEW_RECORD_ACTIVE='"+element.isNewRecordActive+"' ";
			xml+="SHOW_WAIT_RECORDS='"+element.showWaitRecords+"' LAST_INDEX='"+element.lastIndex+"' LINE_ID='" + (parseInt(element.index,10)+1) + "' VALIDATION_TYPE='"+element.validationType+"' ";
			xml+="MAIN_FORM_ID_2='"+element.mainFormID2+"' REQUESTED_FIELD_ID_2='"+element.requestedFieldID2+"' SETTINGS='"+element.settings+"' USER_NAME_FIELD='"+element.userNameField+"' REMIND_LAST_VALUE='"+element.remindLastValue+"'></ELEMENT>";
		}
		xml+="</ELEMENTS></DESIGN></XML_DATA>";
		return xml;
	}
	
	//Form içinde bulunan dataSource=2 olan alanlar için veri getirir.
	this.getAllFieldsData = function _getAllFieldsData(){
		var element;
		for(var ii=0;ii<this.elements.size();ii++){
			element=this.elements[ii];
			//Eğer ana formdan çağrılmamış ve bağlantı alanı değilse.
			if (element.elementID!=this.relationFieldID){
				if (element.autoChooseFromSession){
					//_getDependOnFieldData(0,this,element);
				}
				else if (element.dataSource==CONST_DS_FORM_DATA){
					var mainFormRecID=0;
					var requestedFieldID=0;
					//Eğer bu alan ana bir alana bağlı olarak kayıtlar gelecekse diğer tabirle bir süreç formu ise ve veriler ana formdaki veriye göre filtrelenecekse
					if (element.requestedFieldID2>0){
						var mainForm=formDesign[this.mainFormKey];
						if (mainForm!=null){
							mainFormRecID=mainForm.recID;
							requestedFieldID=element.requestedFieldID2;
						}
						else {
							alert(element.name + " için ana form id si tespit edilemedi'");
							return;
						}
					}
				
					getFieldData(element,this.adminSide,this.recID,mainFormRecID,requestedFieldID);
				}
			}
		}
	}
	
	function getFieldData(element,adminSide,recID,mainFormRecID,requestedFieldID,mainFormID){
		var url;
		
		if (element.editable && !element.autoChooseFromSession){
			url="/admin/common.php?progress=getFieldData&recID="+recID+"&mainFormRecID="+mainFormRecID+"&requestedFieldID2="+requestedFieldID+
					"&fieldID="+element.elementID+"&adminSide="+adminSide+"&formKey="+element.formKey+
					"&sessionID="+sessionID+"&displayValue="+element.displayValue;
			
			if (!adminSide){
				var winKey=element.formKey.replace("form_","win_");
				arrWindows[winKey].el.mask('Lütfen bekleyiniz...', 'x-mask-loading');
			}
			
		    Ext.Ajax.request({url: url,
				   success: getFieldDataComplete.createDelegate(null, [recID,element.elementID,winKey,element.formKey], true)
				});
			
		}
		
	}
	
	function getFieldDataComplete(request,response,recID,fieldID,winKey,formKey){
		var response=parseResponseText(request.responseText);
		var o = Ext.decode(response.jsonStr);
		if (o["js"]!=null) eval(o["js"]);
		
		$("spanDataArea_"+fieldID).innerHTML=response.html;
		var element=formDesign[formKey].getFieldObjByID(fieldID);
		if (element.required){
			element.validObj = new Spry.Widget.ValidationSelect("spanDataArea_"+fieldID, {validateOn:["change"], invalidValue:"0"});
		}
		
		if (typeof arrReportParamValidStr!="undefined"){
			for(var ii=0;ii<arrReportParamValidStr.length;ii++){
				eval("arrReportParamValidObj["+ii+"]="+arrReportParamValidStr[ii]);
			}		
		}
		
		if (recID>0){
			if (element.elementType==CONST_FIELD_RADIO){
				var formID=formKey.replace("form_","");
				eval("var fieldElement=form_"+formID+".radioField_"+fieldID);
				if (fieldElement!=null){
					for (var ii=0;ii<fieldElement.length;ii++){
						if (fieldElement[ii].value==element.fieldValue){
							fieldElement[ii].checked=true;
							fieldElement[ii].fireEvent("onclick");
							break;
						}
					}
				}
			}
			else if (element.elementType==CONST_FIELD_CHECKBOX){
				var formID=formKey.replace("form_","");
				eval("var fieldElement=form_"+formID+".checkField_"+fieldID);
				if (fieldElement!=null){
					var arrFieldValue=element.fieldValue.split(",");
					for (var kk=0;kk<arrFieldValue.length;kk++){
						fieldValue=arrFieldValue[kk];
						for (var ii=0;ii<fieldElement.length;ii++){
							if (fieldElement[ii].value==fieldValue){
								fieldElement[ii].checked=true;
								fieldElement[ii].fireEvent("onclick");
								break;
							}
						}
					}
				}
			}
			else{
				var fieldObj=formDesign[formKey].getFieldObjByID(fieldID);
				if (fieldObj.fieldValue>0)
					$("field_"+fieldID).value=fieldObj.fieldValue;
					
				if ($("field_"+fieldID).value>0)
					$("field_"+fieldID).fireEvent('onchange');
			}
		}
	}
	
	var activeAjaxCall=0;
	
	//Ana elementte olan değişikliğe göre alt element verilerini getirir.	
	this.getDependOnFieldData = function _getDependOnFieldData(fieldValue,formObject,field,fromReport){
		var url;
		if (fromReport==null) fromReport=false;
		
		if ($("field_"+field.elementID).selectedIndex>0)
			if ($("display_"+field.elementID)) //Rapor tasarımında bu element olmuyor.
				$("display_"+field.elementID).value=$("field_"+field.elementID).options[$("field_"+field.elementID).selectedIndex].innerHTML;
		
		//Bu alana bağlı alt seçim alanlarını temizliyoruz.
		childFieldObj=this.getFieldByMainFieldID(field.elementID);
		while (typeof(childFieldObj)!="undefined"){
			childFieldID=childFieldObj.elementID;
			var formID=formObject.formID;
			var onchangeStr="formDesign['form_"+formID+"'].calculateFieldValues();formDesign['form_"+formID+"'].getDependOnFieldData(this.value,formDesign["+formID+"],formDesign["+formID+"].elements["+childFieldObj.index+"],"+fromReport.toString()+");";
			
			if (childFieldObj.elementType==CONST_FIELD_SELECT)
				html="<select style=\""+childFieldObj.elementStyle.cssText+"\" id=\"field_"+childFieldID+"\""+
						 " onchange=\""+onchangeStr+"\" name=\"field_"+childFieldID+"\" ><option value='0'>Seçiniz<option></select>";
			else html="";
			
			//Rapor sihirbazında alana bağlı alan sorgu parametrelerine konulmayabilir!
			if ($("spanDataArea_"+childFieldID)){
				$("spanDataArea_"+childFieldID).innerHTML=html;
			}
			childFieldObj=this.getFieldByMainFieldID(childFieldID);
		}
		
		if (field.dataSource==CONST_DS_DEPEND_ON_FIELD){
			mainFieldID=field.mainFieldID;
			var paramStr="";
			while (mainFieldID>0){
				var mainFieldObj=formObject.getFieldObjByID(mainFieldID);
				
				mainFieldValue=$("field_"+mainFieldObj.elementID).value;
				
				paramStr+="param_"+mainFieldObj.elementID+"="+$("field_"+mainFieldObj.elementID).value+"&";
				mainFieldID=mainFieldObj.mainFieldID;
			}
			if (paramStr!="") paramStr=paramStr.substr(0,paramStr.length-1);
			url="/admin/common.php?progress=getDependOnFieldData&formKey="+formObject.formKey+"&fieldID="+field.elementID+
					"&fieldValue="+fieldValue+"&sessionID="+sessionID+"&categoryID="+formObject.categoryID+"&fromReport="+fromReport.toString();
			url+="&"+paramStr;					
		}
		else{
			url="/admin/common.php?progress=getDependOnFieldData&formKey="+formObject.formKey+"&fieldValue="+fieldValue+
					"&fieldID="+field.elementID+"&sessionID="+sessionID+"&categoryID="+formObject.categoryID+"&fromReport="+fromReport.toString();
		}
		field.fieldValue=$("field_"+field.elementID).value;
		if (!adminSide && activeAjaxCall==0){
			var winKey="win_"+formObject.formID;
			if (arrWindows[winKey]!=null)
				arrWindows[winKey].el.mask('Lütfen bekleyiniz...', 'x-mask-loading');
			else{
			    Ext.MessageBox.show({
			        msg: 'Lütfen bekleyiniz,',
			        progressText: 'Bağlanıyor...',
			        width:400,
			        wait:true,
			        icon:'ext-mb-download', //custom class in msg-box.html
			        animEl: 'mb7'
			    });
			}
			waitScreenActive=true;
		}
		
		Ext.Ajax.request({url: url,
	   						success: getDependOnFieldDataComplete.createDelegate(null, [formObject.formKey,fromReport], true)
						});
		
		activeAjaxCall++;
	}	
	
	function getDependOnFieldDataComplete(request,response,formKey,fromReport){
		activeAjaxCall--;
		
		var winKey=formKey.replace("form_","win_");

		var response=parseResponseText(request.responseText);
		var o = Ext.decode(response.jsonStr);
		if (o["js"]!=null) eval(o["js"]);

		if (typeof(arrWindows)!="undefined")
			if (arrWindows[winKey]!=null)
				arrWindows[winKey].el.unmask();

		arrHTML=response.html.split("##"); //Alanların html i arrayda geliyor.
		for (var ii=0;ii<arrDependOnFieldID.length;ii++){
			var html=arrHTML[ii];
			var fieldID=arrDependOnFieldID[ii];
			if (!adminSide && activeAjaxCall==0){
				var winKey=formKey.replace("form_","win_");
				
				if (arrWindows[winKey]==null){
					Ext.MessageBox.hide();
				}
			}
			
			//Rapor sihirbazında alana bağlı alan sorgu parametrelerine konulmayabilir!
			if ($("spanDataArea_"+fieldID))
				$("spanDataArea_"+fieldID).innerHTML=html;
			
			var element=formDesign[formKey].getFieldObjByID(fieldID);		
			if (element.required){
				element.validObj = new Spry.Widget.ValidationSelect("spanDataArea_"+element.elementID, {validateOn:["change"], invalidValue:"0"});
			}
			
			
			formDesign[formKey].calculateFieldValues();
			
			if ($("field_"+fieldID)){
				if (element.elementType==CONST_FIELD_SELECT){
					//Eğer seçenek gelmişse value set et. aksi takdir de 0 seçili olsun.
					if ($("field_"+fieldID).length>1)
						$("field_"+fieldID).value=element.fieldValue;
					else $("field_"+fieldID).value=0;
					
					//bazı durumlarda field obje value si eski kalıyor. o nedenle eğer value boş ise 0 a set ediyorz.
					if ($("field_"+fieldID).value=="") $("field_"+fieldID).value=0;
					if ($("field_"+fieldID).value>0)
						$("field_"+fieldID).fireEvent('onchange');
				}
				else if (element.elementType==CONST_FIELD_RADIO){
					var formID=formKey.replace("form_","");
					if (!fromReport)
						eval("var fieldElement=form_"+formID+".radioField_"+fieldID);
					else
						eval("var fieldElement=formQueryParams.radioField_"+fieldID);
					
					for (var ii=0;ii<fieldElement.length;ii++){
						if (fieldElement[ii].value==element.fieldValue){
							fieldElement[ii].checked=true;
							fieldElement[ii].fireEvent("onclick");
							break;
						}
					}				
				}
				else if (element.elementType==CONST_FIELD_CHECKBOX){
					var formID=formKey.replace("form_","");
					if (!fromReport)
						eval("var fieldElement=form_"+formID+".checkField_"+fieldID);
					else
						eval("var fieldElement=formQueryParams.checkField_"+fieldID);
						
					var arrFieldValue=element.fieldValue.split(",");
					for (var kk=0;kk<arrFieldValue.length;kk++){
						fieldValue=arrFieldValue[kk];
						for (var ii=0;ii<fieldElement.length;ii++){
							if (fieldElement[ii].value==fieldValue){
								fieldElement[ii].checked=true;
								break;
							}
						}
					}				
				}
				
			}
			
		}

		if (!adminSide && activeAjaxCall==0){
			var winKey=formKey.replace("form_","win_");
			
			if (arrWindows[winKey]==null){
				Ext.MessageBox.hide();
			}
		}
		
		formDesign[formKey].checkFieldsViewConditions();
		if (typeof arrReportParamValidStr!="undefined"){
			for(var ii=0;ii<arrReportParamValidStr.length;ii++){
				eval("arrReportParamValidObj["+ii+"]="+arrReportParamValidStr[ii]);
			}		
		}		
	}
	
	this.ClassElement=function (){
		this.elementType=0;
		this.description="";
		this.elementValue="";
		this.fieldValue=""; //combolarda display ve value birlikte kullanıldığında value kısmıı saklıyor
		this.name="";
		this.shortName=""; //Kısa adı
		this.formulaName="";
		this.required=false;
		this.readOnly=false;
		this.arrange=1; //1 yanyana, 2 alt alta
		this.accepts="";
		this.index=-1;
		this.elementID=0;
		this.lastIndex=-1;
		this.displayValue="";
		this.displayText="";
		this.designMode=true;
		this.settings="";
		this.editable=true;
		this.formula="";
		this.validObj=null; //Element ile ilgili validate kontrolunu tutacak obje
		this.validationType="none"; //Yapılacak doğrulamanın tipi, tam sayı, para, telefon vbg...
		this.readOnly=false;
		this.colSpan=1; //Elementin colspan sayısı. Şu anda bu sadece 1 ya da iki olabilir.İki olması bazı açıklama alanlarının genelde formda ara başlık olarak kullanılmasını sağlar.
		this.isOneRow=false; //Eğer true olursa formdaki yanyana td sayısı göz önüne alınmaz.Bu element tek bir row içinde gösterilir.
		this.automaticChoose=false; //Dinamik form verilerinde ön tarafan giriş yapıldığında giriş yapılan formdaki sessiona bağlı bir alan ise otomatik olarak sessiondaki veriyi getirmesi gerektiğini gösteren alan.
		this.autoComplete=false;
		this.formKey="";
		this.remindLastValue=false;
		this.userNameField=false;
		this.autoChooseFromSession=false; //Otomatik seçilmesi gerekli ama seçim hakkı olmadığı durumlarda sistem otomatik olarak otomatik seçim yapar veriyi sessiondan alır.
		this.currencyID=0;
		this.isNewRecordActive=false;
		
		this.onlineQuestionField=false;
		this.onlineOptionsField=false;
		this.onlineAnswerField=false;
		this.onlinePointField=false;
		
		this.dataSource=CONST_DS_USER; //
		this.mainFormID=0; //data source 2 olduğu durumda bağlanılan ana form id
		this.mainFieldID=0; //data source 3 olduğu durumda bağlanılan ana alan id
		this.mainFieldIndex=0; //form sihirbazından ilk kaydederken field id si oluşmadığından field index ile tespit ediyoruz.
		this.requestedFieldID=0; //data source 2 ve 3 olduğu durumda verisi kullanılacak alan id si
		
		this.mainFormID2=0; //data source 2 durumunda veriler bir ana süreç formuna göre gelecekse
		this.requestedFieldID2=0; 
		this.formID=0;
		
		//Data source dinamik form verisi ya da alana bağlı olan alanlarda geçerli
		this.showActiveRecords=true; //Aktif kayıtları göster
		this.showPassiveRecords=true; //Pasif kayıtları göster
		this.showWaitRecords=true; //Beklemedeki kayıtları göster.
		
		//Style objesinin kendisi tutuluyor.
		this.lineAreaStyle=new ClassStyle();
		this.headAreaStyle=new ClassStyle();
		this.dataAreaStyle=new ClassStyle();
		this.elementStyle=new ClassStyle();
		
		this.trIndex=0;
		
		this.selectedValues = new SelectedFormValueList; //ClassDepOnFieldCondGroup listesi tutuluyor.
		this.fieldViewConditions = new SelectedFormValueList;
		
		this.uniqeID=function _uniqeID(){
			return this.elementID;
		}
		
		this.getJsonStrForStore=function _getJsonStrForStore(){
			var jsonStr="{name:'f_"+this.elementID+"'";
			
			switch(this.validationType){
				case "integer":
					break;
				
				case "currency":
					//jsonStr+=",type:'float'";
					break;
				
				case "currency_with_symbol":
					//jsonStr+=",type:'float'";
					break;
				
				case "date":
					//jsonStr="type: 'date', dateFormat: 'n/j h:ia'";
					jsonStr+=",type:'date',dateFormat: 'd/m/Y'";
					break;
				
				case "time":
					//jsonStr="type: 'date', dateFormat: 'n/j h:ia'";
					break;
			}
			jsonStr+="}";
			
			
			jsonStr+=",{name:'source_rec_id_"+this.elementID+"'}";
			//if (this.validationType=="currency_with_symbol"){
				//jsonStr+=",{name:'curr_id_"+this.elementID+"',type:'integer'}";
			//}
		
			return jsonStr;
		}
		
		this.getJsonStrForGrid=function _getJsonStrForGrid(){
			var jsonStr="{id:'f_"+this.elementID+"',dataIndex:'f_"+this.elementID+"', header:'"+this.name+"',sortable:true";
			switch(this.validationType){
				case "integer":
					break;
				
				case "currency":
					jsonStr+=",type:'float',align:'right',renderer:function(value){return formatCurrency(value);}";
					//jsonStr+=",type:'float'";
					break;
				
				case "currency_with_symbol":
					jsonStr+=",type:'float',align:'right',renderer:function(value){return formatCurrency(value);}";
					break;
				
				case "date":
					jsonStr+=",renderer: Ext.util.Format.dateRenderer('d/m/Y')";
					//jsonStr+=",renderer: function() {var dateObject = Date.parseDate(value, 'Y-m-d H:i:s'); return Ext.util.Format.date(dateObject, 'd.m.Y. H:i:s');}";
					break;
				
				case "time":
					//jsonStr="type: 'date', dateFormat: 'n/j h:ia'";
					break;
			}		
			
			return jsonStr+"}";
		}
		
		this.initialize= function _initialize(){
			
			if (!this.editable) return;
			
			var uniqeID = this.elementID;
			var str;
			var validObjName; //doğrulama objesinin adı. form elementinin tipine göre değişebiliyor.
			var formatStr="yes";
			
			if (this.elementType != CONST_FIELD_DIV){
				switch (parseInt(this.elementType,10)){
					case CONST_FIELD_TEXT:
						validObjName="ValidationTextField";	
						break;
					
					case CONST_FIELD_TEXTAREA:
						validObjName="ValidationTextarea";
						formatStr="no";
						break;
					
					case CONST_FIELD_CHECKBOX:
						validObjName="ValidationCheckbox";
						formatStr="no";
						break;
									
					case CONST_FIELD_RADIO:
						validObjName="ValidationRadio";
						formatStr="no";
						break;
					
					case CONST_FIELD_SELECT:
						if (this.required){
							this.validObj = new Spry.Widget.ValidationSelect("spanDataArea_"+uniqeID, {isRequired:this.required});
						}
						//Eğer display ve value var ise, combo valuesini set et.
						if ((this.dataSource==CONST_DS_USER && this.elementValue.indexOf('#')>-1)){
							$("field_"+uniqeID).value=this.fieldValue;
						}
						else if (this.dataSource==CONST_DS_FORM_DATA && this.autoComplete){
							$("autoComplete_"+uniqeID).value=this.displayValue;
						}
						
						//else this.validObj=new Spry.Widget.ValidationSelect("spanDataArea_"+uniqeID, {validateOn:["blur"]});
						return;
				
					case CONST_FIELD_PASSWORD:
						this.validObj=new Spry.Widget.ValidationTextField("spry_"+uniqeID, "none", {minChars:6,maxChars:15,validateOn:["blur"]});
						pwdFieldName="field_"+uniqeID;
						return;
						
					case CONST_CONFIRM_PWD:
						//valid objesine index ve id olmadığı için direk spry olarak kontrol ettirebiliyoruz.
						this.validObj=new Spry.Widget.ValidationConfirm("spry_pwdAgain", pwdFieldName, {validateOn:["blur"]});
						return;
											
					case CONST_FIELD_HTML_EDITOR:
						if (this.editable){
							if (this.settings==0 || this.settings==1){
							
								tinyMCE.settings = tinyMCE.configs[this.settings]; 
								//Setting burada simply ya advanced oluyor. 0=simply, 1=advanced
								//TINY editör başlangıçda advanced ve simple olmak üzere set edildi.
								tinyMCE.execCommand("mceAddControl", true, "field_"+ uniqeID);
												
								var html=this.displayValue;
								
								setTimeout(function f(){setEditorValue("field_"+uniqeID,html);},3000);
							}
							else{
								alert("HTML editör tipi seçilmemiş.Lütfen form sihirbazından HTML editör özelliklerinden basit ya da gelişmiş seçeneklerinden birini seçiniz.");
							}
						}
						return;
				}
		
				var validationStr;
				switch(this.validationType){
					case "phone_number":
						validationStr='this.validObj=new Spry.Widget.'+validObjName+'("spry_"+uniqeID, "custom", {validateOn:["blur"],pattern:"000-000 00 00", hint:"000-000 00 00", maxChars:13,isRequired:this.required,useCharacterMasking:true});';
						break;
					
					case "integer":
						validationStr='this.validObj=new Spry.Widget.'+validObjName+'("spry_"+uniqeID, "integer", {validateOn:["blur"],maxChars:10,hint:"0",minValue:0,isRequired:this.required,useCharacterMasking:true});';
						break;
					
					case "currency":
						validationStr='this.validObj=new Spry.Widget.'+validObjName+'("spry_"+uniqeID, "currency", {validateOn:["blur"],maxChars:15,minValue:0,useCharacterMasking:true,isRequired:this.required,format:"dot_comma"});';
						break;
					
					case "currency_with_symbol":
						validationStr='this.validObj=new Spry.Widget.'+validObjName+'("spry_"+uniqeID, "currency", {validateOn:["blur"],maxChars:15,minValue:0,useCharacterMasking:true,isRequired:this.required,format:"dot_comma"});';
						break;
					
					case "none":
						if (formatStr=="yes")
							validationStr='this.validObj=new Spry.Widget.'+validObjName+'("spry_"+uniqeID, "none", {validateOn:["blur"],isRequired:this.required});';
						else
							validationStr='this.validObj=new Spry.Widget.'+validObjName+'("spry_"+uniqeID, {validateOn:["blur"],isRequired:this.required});';
						break;
					
					case "date":
						var date=new Date();
						m="0"+(date.getMonth()+1);
						y=date.getFullYear();
						d="0"+date.getDate()
						var today=d.substr(d.length-2,2)+"/"+m.substr(m.length-2,2)+"/"+y;
						validationStr='this.validObj=new Spry.Widget.'+validObjName+'("spry_"+uniqeID, "date", {validateOn:["blur"], format:"dd/mm/yyyy",maxChars:11,isRequired:this.required});';
						break;
					
					case "time":
						var today=new Date();
						var h=today.getHours();
						var m=today.getMinutes();
						var s=today.getSeconds();
						
						if (h.toString().length==1) h="0"+h.toString();
						if (m.toString().length==1) m="0"+m.toString();
						if (s.toString().length==1) s="0"+s.toString();
						
						var time;
						if (this.displayValue!="")
							time=this.displayValue;
						else
							time=h+":"+m+":"+s;	
					
						validationStr='this.validObj=new Spry.Widget.'+validObjName+'("spry_"+uniqeID, "time", {validateOn:["blur"], format:"HH:MM:SS", pattern:"'+time+'",maxChars:8,isRequired:this.required});';
						break;
	
					default: 
						validationStr='this.validObj=new Spry.Widget.'+validObjName+'("spry_"+uniqeID, this.validationType, {validateOn:["blur"],maxChars:50,useCharacterMasking:true,isRequired:this.required});';
					
				}
			}
			
			eval(validationStr);
			
			if (this.validationType=="time") 
				$("field_"+uniqeID).value=time; 
			else if (this.validationType=="date"){
				if (this.displayValue!="")
					$("field_"+uniqeID).value=this.displayValue;
				else
					$("field_"+uniqeID).value=today;	
	
			}
			else{
				if (this.remindLastValue){
					if (readCookie(userName)!=null) $("field_"+uniqeID).value=readCookie(userName);
				}
			}
		}
	
		
		this.GetHTML = function (withoutTrTag,formColumnCount,recID,trIndex,insertRight){
			var html="";
			var data="";
			var space="";
			var uniqeID=""; //element id lerinde kullanılıyor.
			var readOnlyText="";
			var hiddenField=false;
			if (this.readOnly) readOnlyText=" readonly ";
			this.displayValue=this.displayValue.replace(/\(#singleQuota#\)/g,'\'');
			this.displayValue=this.displayValue.replace(/\(#doubleQuota#\)/g,'\'');
			//default değer olarak 1 veriyoruz.
			if (formColumnCount==null) formColumnCount=1;
	
			/*
			elemenlerin id lerini -id="formFieldEmail" gibi- değiştirme. CSS lerde bu alanlara otomatik olarak stil veriliyor çünkü.
			*/
			//uniqeID = this.elementID+'_' + this.index;
			uniqeID = this.elementID;
			var lineAreaCssText=this.lineAreaStyle.cssText.toLowerCase();
			
			if (this.designMode){
				lineAreaCssText=lineAreaCssText.replace("display:none","");
				lineAreaCssText=lineAreaCssText.replace("display: none","");
			}
			
			if (withoutTrTag==null || !withoutTrTag || this.isOneRow) {
				html='<tr style="'+lineAreaCssText+'" id="trForm_'+trIndex+'">';
			}
			
			//eğer colspan var ise sadece ilk hücreyi colspan yap ve göster diğerini gizle.
			//Colspan yaparken formun geneli kaç td den oluşacak ise o kadar ile çarpıyoruz.
			if (this.colSpan==2){
				if (this.designMode){
					html+='<td onmousedown="activeElementIndex='+this.index+';activeElementN=design.elements[activeElementIndex];" ondblclick="getFieldProperties();"'; 
					html+='colSpan="'+this.colSpan*formColumnCount+'" id="FormFieldName" style="'+this.headAreaStyle.cssText+'">'+this.name+'</td><td id="FormFieldType" style="display:none;"><span id="spry_'+uniqeID+'">';
				}
				else{
					html+='<td colSpan="'+this.colSpan*formColumnCount+'" id="FormFieldName" style="'+this.headAreaStyle.cssText+'">'+this.name+'</td><td id="FormFieldType" style="display:none;"><span id="spry_'+uniqeID+'">';
				}
			}
			else{
				if (this.designMode){
					html+='<td onmousedown="activeElementIndex='+this.index+';activeElementN=design.elements[activeElementIndex];" ondblclick="getFieldProperties();" '; 
					html+='id="FormFieldName" style="'+this.headAreaStyle.cssText+'">'+this.name+'</td>'
					html+='<td onmousedown="activeElementIndex='+this.index+';activeElementN=design.elements[activeElementIndex];" ondblclick="getFieldProperties();" ';
					html+='id="FormFieldType" style="'+this.dataAreaStyle.cssText+'"><span id="spry_'+uniqeID+'">';
				}
				else{
					html+='<td id="FormFieldName" style="'+this.headAreaStyle.cssText+'">'+this.name+'</td><td id="FormFieldType" style="'+this.dataAreaStyle.cssText+'"><span id="spry_'+uniqeID+'">';
				}
			}
		    
		    var calculateStr="";
		    if (!this.designMode){
		    	calculateStr="formDesign['"+this.formKey+"'].calculateFieldValues();";
		    }
		    else{
		    	calculateStr="design.calculateFieldValues();";
		    }
		    
		    //Eğer satır görünmez ise elementide görünmez yapıyoruz.Çünkü dinamik listede veriler oluşturulurken eğer element
		    if (lineAreaCssText.indexOf("display: none")>-1 && this.elementStyle.cssText.indexOf("display: none")==-1)
		    	this.cssText="display: none;"+this.elementStyle.cssText;
		    else
		    	this.cssText=this.elementStyle.cssText;
			
			var errorMessage="";
			switch (this.validationType){
				case "phone_number":
					errorMessage="Geçerli bir telefon giriniz.";		
					break;
				
				case "currency":
					errorMessage="Geçerli bir sayı giriniz.";
					break;
				
				case "integer":
					errorMessage="Geçerli bir tam sayı giriniz.";
					break;
					
				case "currency_with_symbol":
					errorMessage="Geçerli bir para değeri giriniz.";
					break;	
				
				case "none":
					errorMessage="Geçerli bir değer giriniz.";
					break;
				
				case "date":
					errorMessage="Geçerli bir tarih giriniz.";
					break;
				
				case "time":
					errorMessage="Geçerli bir saat giriniz.";
					break;
					
				case "email":
					errorMessage="Geçerli bir e-posta giriniz.";
					break;
				
				case "ip":
					errorMessage="Geçerli bir ip adresi giriniz.";
					break;
					
				case "url":
					errorMessage="Geçerli bir web adresi giriniz.Adresin başına http:// yada ftp:// koymayı unutmayınız.";
					break;
			}
	
		    switch(parseInt(this.elementType,10)) {
				case CONST_FIELD_TEXT:
					if (this.editable){
						if (this.validationType=="currency_with_symbol"){
							var currency=arrCurrency[this.currencyID];
							this.displayValue=this.displayValue.replace(currency,"").trim();
						}
					
						html += '<span id="spanDataArea_'+uniqeID+'">';
						html+='<input '+readOnlyText+ ' onkeyup="'+calculateStr + '" value="'+this.displayValue+'" type="text" name="field_'+ uniqeID + '" id="field_'+ uniqeID + '" style="' + this.cssText + '" />';
						if (this.validationType=="currency_with_symbol"){
							html += '&nbsp<select style="width:50px;heigth:13px;font-family:tahoma;font-size:10px;"  name="currency_'+ uniqeID + '" id="currency_'+ uniqeID + '">';
							for (var ii in arrCurrency) {
								var type=typeof arrCurrency[ii];
								if (type.trim()=="string" && ii==this.currencyID)
									html+="<option selected value='"+ii+"'>"+arrCurrency[ii]+"</option>";
								else if (type.trim()=="string")
									html+="<option value='"+ii+"'>"+arrCurrency[ii]+"</option>";
							}
							html += '</select>';
						}
						else if (this.validationType=="date"){
							html+='<input type="image" src="/images/cal.gif" onclick="displayCalendar($(\'field_'+uniqeID+'\'),\'dd/mm/yyyy\',this);return false;">';
						}
						html+='</span>';
						html+='<br><span class="textfieldRequiredMsg">*Zorunlu alan</span><span class="textfieldMinCharsMsg">*Çok az veri girdiniz..</span><span class="textfieldMaxCharsMsg">*Girdiğiniz veri çok uzun.</span><span class="textfieldInvalidFormatMsg">*'+errorMessage+'</span></span></td>';
					}
					else
						html+= '<span name="field_'+ uniqeID + '" id="field_'+ uniqeID + '" style="' + this.dataAreaStyle.cssText + '" />'+this.displayValue+'</span></td>';
					break;
	
				case CONST_FIELD_PASSWORD:	
					if (this.editable){
						html+= '<input type="password" name="field_'+ uniqeID + '" id="field_'+ uniqeID + '" style="' + this.cssText + '" />';
						html+='<br><span class="textfieldRequiredMsg">*Zorunlu alan</span><span class="textfieldMinCharsMsg">*Şifreniz en az 6 karakter olmalıdır</span><span class="textfieldMaxCharsMsg">*Şifreniz en fazla 20 karakter olmalıdır</span><span class="textfieldInvalidFormatMsg">Hatalı giriş.</span></span></td>';
					}
					else
						html+= '<span name="field_'+ uniqeID + '" id="field_'+ uniqeID + '" style="' + this.dataAreaStyle.cssText + '" />'+this.displayValue+'</span></td>';
					break;
	
				case CONST_CONFIRM_PWD:	
					if (this.editable){
						html+= '<input type="password" name="confirmPwd" id="confirmPwd" style="' + this.cssText + '" />';
						html+='<br><span class="confirmInvalidMsg">Şifreleriniz uyuşmuyor.</span><span class="confirmRequiredMsg">*Zorunlu alan</span><span class="textfieldMinCharsMsg">*Şifreniz en az 4 karakter olmalıdır</span><span class="textfieldMaxCharsMsg">*Şifreniz en fazla 20 karakter olmalıdır</span><span class="textfieldInvalidFormatMsg">Hatalı giriş.</span></span></td>';
					}
					else
						html+= '<span name="field_'+ uniqeID + '" id="field_'+ uniqeID + '" style="' + this.dataAreaStyle.cssText + '" />'+this.displayValue+'</span></td>';
					break;
				
				case CONST_FIELD_TEXTAREA :
					if (this.editable){
						html += '<textarea name="field_'+ uniqeID + '" id="field_'+ uniqeID + '" style="' + this.cssText + '">'+this.displayValue+'</textarea>';
						html+='<br><span class="textareaRequiredMsg">*Zorunlu alan</span></span></td>';
					}
					else
						html+= '<span name="field_'+ uniqeID + '" id="field_'+ uniqeID + '" style="' + this.dataAreaStyle.cssText + '" />'+this.displayValue+'</span></td>';
					break;
				
				
				case CONST_FIELD_CHECKBOX :
					html += '<span id="spanDataArea_'+uniqeID+'">';	
					if (this.editable){
						if(this.arrange==2) {
							space = "<br>";
						}
						data = this.elementValue.split("(br)");
						for(i=0;i<data.length;i++) {
							if(data[i].length > 0) { 
								html += '<input onclick="setChecboxValues('+this.formID+','+this.elementID+');" style="' + this.cssText + '" name="checkField_'+ uniqeID+'" id="checkField_'+uniqeID+'" type="checkbox">' + space;
							}
						}
					}
					else{
						html+= '<span name="field_'+ uniqeID + '" id="field_'+ uniqeID + '" style="' + this.dataAreaStyle.cssText + '" />'+this.displayValue+'</span>';	
					}
					
					html+='<input type="hidden" id="field_'+ uniqeID + '" name="field_'+ uniqeID + '">';
					html+="</span>";
					html+='<br><span class="checkboxRequiredMsg">*Lütfen bir seçim yapınız</span>';
					
					break;
				
				case  CONST_FIELD_RADIO :
					html += '<span id="spanDataArea_'+uniqeID+'">';
					if (this.editable){
						if (this.elementValue!=""){
							if(this.arrange==2) {
								space = "<br>";
							}
							data = this.elementValue.split("(br)");
							var onclickStr="$('field_"+uniqeID+"').value=this.value;";
							
							for(i=0;i<data.length;i++) {
								var value="";
								var display="";
								if (data[i].indexOf("#")>-1){
									value=data[i].toString().split("#")[0].toString().rtrim().ltrim();
									display=data[i].toString().split("#")[1].toString().rtrim().ltrim();
								}
								else{
									display=data[i].rtrim().ltrim();
									value=data[i].rtrim().ltrim();
								}
							
								if(data[i].length > 0) { 
									if (data[i].rtrim()==this.displayValue.rtrim().ltrim())
										html += '<input checked style="' + this.cssText + '" onclick="'+onclickStr+calculateStr+'" name="radioField_'+uniqeID+'" id="radioField_'+ uniqeID + '" type="radio" value="'+value+'">'+display+space;
									else
										html += '<input style="' + this.cssText + '" onclick="'+onclickStr+calculateStr+'" name="radioField_'+uniqeID+'" id="radioField_'+ uniqeID + '" type="radio" value="'+value+'">'+display + space;
								}
							}
							html+='<input type="hidden" id="field_'+ uniqeID + '" name="field_'+ uniqeID + '">';
						}
						else{
							html+= '<span id="spanDataArea_'+uniqeID+'"></span>';
						}
					}
					else{
						html+= '<span name="field_'+ uniqeID + '" id="field_'+ uniqeID + '" style="' + this.dataAreaStyle.cssText + '" />'+this.displayValue+'</span>';	
					}
					
					html+="</span>";
					html+='<br><span class="radioRequiredMsg">*Lütfen bir seçim yapınız</span>';
					html+='</td>';
					break;
	
				case CONST_FIELD_SELECT :
					if (this.editable){
						html += '<span id="spanDataArea_'+uniqeID+'">';
						
						if (this.dataSource==CONST_DS_FORM_DATA && this.autoComplete){
							html+='<input type="text" id="autoComplete_'+uniqeID+'" name="autoComplete_'+uniqeID+'" style="'+uniqeID+';height:14px;">';
							this.cssText+=";display:none;";
						}
						else {
							html += '<select onchange="'+calculateStr+'" name="field_'+ uniqeID + '" id="field_'+ uniqeID + '" style="' + this.cssText + '">';
							if (this.dataSource==CONST_DS_USER)
								html += '<option value="">Seçiniz</option>';
							else
								html += '<option value="0">Seçiniz</option>';
							
							if (this.elementValue!=""){
								data = this.elementValue.split("(br)");
								for(i=0;i<data.length;i++) {
									var value="";
									var display="";
		
									if (data[i].indexOf("#")>-1){
										value=data[i].toString().split("#")[0].toString().rtrim().ltrim();
										display=data[i].toString().split("#")[1].toString().rtrim().ltrim();
									}
									else{
										display=data[i].rtrim().ltrim();
										value=data[i].rtrim().ltrim();
									}
															
									if(display.length > 0) { 
										if (display.rtrim().ltrim()==this.displayValue.rtrim().ltrim())
											html += '<option selected value="'+value+'">'+display+'</option>';
										else
											html += '<option value="'+value+'">'+display+'</option>';
									}
								}
							}
							html += '</select>';
							html+='<br><span class="selectRequiredMsg">*Lütfen bir seçim yapınız</span></span></td>';
						}
					}
					else{
						html+= '<span name="field_'+ uniqeID + '" id="field_'+ uniqeID + '" style="' + this.dataAreaStyle.cssText + '" />'+this.displayValue+'</span></td>';						
					}
					
					break;
				
				case CONST_FIELD_DIV :
					var displayText="";
					
					if (this.displayValue!="")
						displayText=this.displayValue;
					else displayText=this.description.replace("(br)","<br>");
					
					html += '<span id="spanDataArea_'+uniqeID+'">';
					html += '<div name="field_'+ uniqeID + '" id="field_'+ uniqeID + '">' + displayText;
					html += '</div>';
					html += '</span></td>';
					break;
					
				case CONST_FIELD_HTML_EDITOR:
					//Eğer kayıt mevcut ise değer html editöre bu daha sonradan set ediliyor.
					if (this.editable && parseInt("0"+recID,10)==0)
						html += '<textarea value="'+this.displayValue+'" name="field_'+ uniqeID + '" id="field_'+ uniqeID + '" style="' + this.cssText + '">'+this.displayValue+'</textarea></td>';
					else if (this.editable && parseInt("0"+recID,10)>0){
						html += '<textarea name="field_'+ uniqeID + '" id="formFieldHTMLEditor" style="' + this.cssText + '">'+this.displayValue+'</textarea></td>';
					}
					else {
						html+= '<br><span name="field_'+ uniqeID + '" id="formFieldHTMLEditor" style="' + this.dataAreaStyle.cssText + '" />'+this.displayValue+'</span></span></td>';
					}
					break;
	
				default:
					html+="<i><b><br><center>Yeni Form Alanı</center><br><br></b></i>";
					break;
			}
			
			if (!withoutTrTag || withoutTrTag==null) html+="</tr>";
	
			if ((parseInt(this.elementType,10)!=CONST_FIELD_DIV)){
				if (this.description.trim()!="")
			    	html+='<tr id=\"trForm\"><td >&nbsp;</td><td id="FieldDesc">'+this.description.replace("(br)","<br>")+'</td><td>&nbsp;</td></tr>';	
			}
			
			if (this.dataSource==CONST_DS_FORM_DATA || this.dataSource==CONST_DS_DEPEND_ON_FIELD ||
					this.dataSource==CONST_DS_DEP_ON_FIELD_WITH_COND || this.elementType==CONST_FIELD_SELECT){
				//html+="<tr style='display:none;'><td><input type='hidden' name='display_"+uniqeID+"' id='display_"+uniqeID+"' value='"+this.displayValue+"'></td></tr>";
				html+="<input type='hidden' name='display_"+uniqeID+"' id='display_"+uniqeID+"' value='"+this.displayValue+"'>";
			}
			//alert(html);
		    return html;
		}
	}
	
	
	
	this.rights=new Collection();
	this.getRightsXML=function(){
		
	}
}

var pwdFieldName="";

function ClassRight(){
	this.formID=0;
	this.formName="";
	this.fieldID=0
	this.value="";
	this.displayText="";
	this.lineNumber=-1;
	
	this.rightID=0;
	this.insertRight=0;
	this.updateRight=0;
	this.readRight=0;
	this.fileUploadRight=0;
	this.deleteRight=0;	
}


function getAutoSuggest(fieldObj){
	var fieldID=fieldObj.elementID;
	var mainFormID=fieldObj.mainFormID;
	var requestedFieldID=fieldObj.requestedFieldID;
	var value=$("autoComplete_"+fieldObj.elementID).value;
	var url="/admin/common.php?progress=getAutoSuggest&fieldID="+fieldID+"&mainFormID="+mainFormID+"&requestedFieldID="+requestedFieldID+"&value="+value;

	if ($("field_"+fieldID).value>0){
		$("field_"+fieldID).value=0;
		$("field_"+fieldID).fireEvent("onchange");
	}
	
    Ext.Ajax.request({url: url,
		   success: getAutoSuggestCompleted.createDelegate(null, [fieldObj], true)
		});
}

function getAutoSuggestCompleted(request,response,fieldObj){
	var fieldID=fieldObj.elementID
	$("autoSuggestMenu_"+fieldID).innerHTML=request.responseText;
	$("comboAutoSuggest_"+fieldID).style.cssText=fieldObj.elementStyle.cssText;
	$("comboAutoSuggest_"+fieldID).style.height="50";
	$("autoSuggestMenu_"+fieldID).style.display="";
	//$("comboAutoSuggest_"+fieldID).focus();
}

function autoSuggest_onkeydown(fieldID){
	if (event.keyCode==40){
		if ($("comboAutoSuggest_"+fieldID).style.display=="")
			$("comboAutoSuggest_"+fieldID).focus();
	}
}

function comboAutoSuggest_onkeydown(fieldID){
	if (event.keyCode==13){
		$("field_"+fieldID).value=$("comboAutoSuggest_"+fieldID).value;
		$("field_"+fieldID).fireEvent("onchange");
		$("autoSuggestMenu_"+fieldID).style.display="none";
		$("autoComplete_"+fieldID).value=$("comboAutoSuggest_"+fieldID).options[$("comboAutoSuggest_"+fieldID).selectedIndex].innerHTML;
	}
}

function comboAutoSuggest_ondblclick(fieldID){
	$("field_"+fieldID).value=$("comboAutoSuggest_"+fieldID).value;
	$("field_"+fieldID).fireEvent("onchange");
	$("autoSuggestMenu_"+fieldID).style.display="none";
	$("autoComplete_"+fieldID).value=$("comboAutoSuggest_"+fieldID).options[$("comboAutoSuggest_"+fieldID).selectedIndex].innerHTML;
}

function removeHtmlEditor(formObj){
	for(var ii=0;ii<formObj.elements.size();ii++){
		formObj.elements[ii].fieldValue=0;
		if (formObj.elements[ii].elementType==CONST_FIELD_HTML_EDITOR && formObj.elements[ii].editable){
			tinyMCE.execCommand("mceRemoveControl", true, "field_"+formObj.elementID);
			tinyMCE.idCounter--;
		}
	}		
}

