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_FORMULA_ORTALAMA = "ORTALAMA";

function ClassDesign(){
	this.designName="";
	this.description="";
	this.adminSide;
	this.name="";
	this.title="";
	this.id=0;
	this.mapID=0; //Formla ilgili verilerin kaydedildiği map id. map tablosunda....
	this.recordNumber=0;
	this.mainFormMapID=0;
	this.mainCategoryID=0;
	this.loginForm=false;
	this.formulaName="";
	this.colCount=1;
	this.security="0,0,0";
	this.formStatu=1; //0=tanımsız, 1=açık, 2=beklemede, 3=kapalı
	this.fileManagmentActive=false; //Dosya yöneticisi durumu
	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.arrDynamicFormValueCounter= new Array();
	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.id;
	this.categoryID=0;
	
	this.getFieldObjByID=function _getFieldIndexById(fieldID){
		for(var ii=0;ii<this.elements.size();ii++){
			element=this.elements[ii];
			if (element.elementID==fieldID){
				return element;
			}
		}
	}
	
	this.getJsonStrForStore=function _getJsonStrForStore(){
		var jsonStr="{name:'mapID'},{name:'statuID'},";
		for(var ii=0;ii<this.elements.size();ii++){
			element=this.elements[ii];
			if (element.elementType!=CONST_FIELD_PASSWORD){
				jsonStr+=element.getJsonStrForStore()+",";
			}
		}
		
		return "["+jsonStr.substr(0,jsonStr.length-1)+"]";
	}
	
	this.getJsonStrForGrid=function _getJsonStrForGrid(withStatu){
		var jsonStr="";
		var element;
		
		for(var ii=0;ii<this.elements.size();ii++){
			element=this.elements[ii];
			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.
	this.generateHTML = function _generateHTML(withoutTableTag,elementsEditable){
		var html="";
		var element;
		var columnCounter=1;
		var confirmPwdElement;
		
		for(var ii=0;ii<this.elements.size();ii++){
			element=this.elements[ii];
			//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];

			//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.mapID==0)
					element.displayValue="";
					
				//editelementsEditable false ise bu bir güncellemeden sonraki formun editelenmez biçimde getirilmesidir.
				//Bu durumda eğer html editor mevcut ise onu çıkarıyoruz.çünkü artık formda bir html editor olmuyor.
				if (element.elementType==CONST_FIELD_HTML_EDITOR && !elementsEditable){
					var uniqeID="field_"+element.elementID+'_' + element.index;
					tinyMCE.execCommand("mceRemoveControl", true, uniqeID);
				}
								
				//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.mapID,++trIndex);
					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.mapID,trIndex);
							element.trIndex=trIndex;
							columnCounter++;
						}
						else{
							html+=element.GetHTML(true,this.colCount,this.mapID)+"</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.mapID)+"</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.mapID);
						columnCounter++;
					}
				}
			}
		}
		
		if (withoutTableTag==true)
			html+="<input type=\"hidden\" value=\""+this.mapID+"\" id=\"mapID"+this.id+"\" name=\"mapID"+this.id+"\">";
		else{
			html="<form id='form_"+this.id+"'><table align='center' style='"+this.formStyle.cssText+"' width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">"+html+"<input type=\"hidden\" value=\""+this.mapID+"\" id=\"mapID"+this.id+"\" name=\"mapID"+this.id+"\"></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.id+"'></div></form>";
		}
		
		return html;
	}
	
	this.removeForm = function _removeForm(){
		var uniqeID;
		for(var ii=0;ii<this.elements.size();ii++){
			uniqeID="trForm"+this.elements[ii].elementID+"_"+this.elements[ii].index;
			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.
			if (this.elements[ii].elementID!=this.relationFieldID && !this.elements[ii].autoChooseFromSession)
				this.elements[ii].initialize();
		}
		this.getAllFieldsData();
		this.calculateFieldValues();
	}
	
	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.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+"_"+this.elements[jj].index);
									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);
							}
						}
					}
				}
				
				//Eğer alt form hesaplaması değilse...
				if (formula.indexOf("TOPLA")==-1)
					element.displayValue=eval("formatCurrency("+formula+")");
				
				//formula="$('field_"+element.elementID+'_' + element.index+"').readonly=true;";
				
				if (element.editable){
					//formatCurrency common.js içinde tanımlı
					if (parseInt(element.elementType,10)==CONST_FIELD_TEXT){
						formula = "$('field_"+element.elementID+'_' + element.index+"').value=formatCurrency("+formula+");";
					}
					else if (parseInt(element.elementType,10)==CONST_FIELD_DIV){
						formula = "$('field_"+element.elementID+'_' + element.index+"').innerHTML=formatCurrency("+formula+");";
					}					
				}
				else{
					formula = "$('field_"+element.elementID+'_' + element.index+"').innerHTML=formatCurrency("+formula+");";
				}				
				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)
					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+"' SECURITY='"+this.security+"' 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+"' ";
		xml+="COLUMN_COUNT='"+this.colCount+"' ID='"+this.id+"' 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+"' ";
			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_INDEX='"+element.mainFieldIndex+"' ";
			xml+="MAIN_FIELD_ID='"+element.mainFieldID+"' SHOW_ACTIVE_RECORDS='"+element.showActiveRecords +"' SHOW_PASSIVE_RECORDS='"+element.showPassiveRecords +"' ";
			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+"' MAIN_FIELD_ID_2='"+element.mainFieldID2+"' SETTINGS='"+element.settings+"' USER_NAME_FIELD='"+element.userNameField+"' REMIND_LAST_VALUE='"+element.remindLastValue+"'></ELEMENT>";
		}
		xml+="</ELEMENTS></DESIGN></XML_DATA>";
		//alert(xml);
		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];
			if (element.autoChooseFromSession){
				_getDependOnFieldData(0,this,element);
			}
			else if (element.dataSource==CONST_DS_FORM_DATA){
				var mainFormMapID=0;
				var mainFieldID=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.mainFieldID2>0){
					var mainForm=formDesign[this.mainFormKey];
					if (mainForm!=null){
						mainFormMapID=mainForm.mapID;
						mainFieldID=element.mainFieldID2;
					}
					else {
						alert(element.name + " için ana form id si tespit edilemedi'");
						return;
					}
				}
			
				getFieldData(element,this.adminSide,this.mapID,mainFormMapID,mainFieldID);
			}
		}
	}
	
	function getFieldData(element,adminSide,mapID,mainFormMapID,mainFieldID,mainFormID){
		var url;
		
		if (element.editable){
			url="/admin/common.php?progress=getFieldData&mapID="+mapID+"&mainFormMapID="+mainFormMapID+"&mainFieldID2="+mainFieldID+"&fieldID="+element.elementID+"&adminSide="+adminSide+"&formKey="+element.formKey+"&designMode="+element.designMode.toString();
			new Ajax.Request(url,{method: 'post',onComplete:getFieldDataComplete});
		}
		
	}
	
	function getFieldDataComplete(request){
		var arrRequest=request.responseText.split("|");
		var html=arrRequest[0];
		var fieldID=arrRequest[1];
		var fieldLineIndex=arrRequest[2]-1; //client side tarafında index gelen değerden 1 az.
		var formKey=arrRequest[3]
		var js=arrRequest[4];
		
		var spanID="spanDataArea_"+fieldID+"_"+fieldLineIndex;
		$(spanID).innerHTML=html;
		
		//Otomatik seç işaretli ise ana elementi eventi raise etmek için js geliyor.
		if (js!="") eval(js);
		
		var element=formDesign[formKey].elements[fieldLineIndex];		
		if (element.required){
			element.validObj = new Spry.Widget.ValidationSelect("spanDataArea_"+element.uniqeID(), {validateOn:["change"], invalidValue:"0"});
		}
		//else element.validObj=new Spry.Widget.ValidationSelect("spanDataArea_"+element.uniqeID(), {validateOn:["change"]});
		
	}
	

	//Ana elementte olan değişikliğe göre alt element verilerini getirir.	
	this.getDependOnFieldData = function _getDependOnFieldData(sourceValue,formObject,mainField){
		var url;
		var sessionID="";
		designMode=formObject.elements[0].designMode;
		if (formObject.mapID>0)
			url="/admin/common.php?progress=getDependOnFieldData&mapID="+formObject.mapID+"&formKey="+formObject.formKey+"&designMode="+designMode+"&sourceValue="+sourceValue+"&sourceFieldID="+mainField.mainFieldID+"&mainFieldID="+mainField.elementID+"&mainFormMapID="+formObject.mainFormMapID+"&sessionID="+sessionID+"&categoryID="+formObject.categoryID;
		else
			url="/admin/common.php?progress=getDependOnFieldData&formKey="+formObject.formKey+"&designMode="+designMode+"&sourceValue="+sourceValue+"&sourceFieldID="+mainField.mainFieldID+"&mainFieldID="+mainField.elementID+"&mainFormMapID="+formObject.mainFormMapID+"&sessionID="+sessionID+"&categoryID="+formObject.categoryID
		new Ajax.Request(url,{method: 'post',parameters: $(formObject.formKey).serialize(true),onComplete:getDependOnFieldDataComplete});
	}	
	
	function getDependOnFieldDataComplete(request){
		var response=request.responseText;
		if (response==0) return;
		response=response.substr(0,response.length-1);
				
		var arrRequest=response.split("|");
		var counter=0;
		
		while(counter<arrRequest.length){
			var html=arrRequest[counter];
			var fieldID=arrRequest[counter+1];
			var fieldLineIndex=arrRequest[counter+2];
			var formKey=arrRequest[counter+3];
			var js=arrRequest[counter+4];
			$("spanDataArea_"+fieldID+"_"+fieldLineIndex).innerHTML=html;
			if (js!="") eval(js);
			
			var element=formDesign[formKey].elements[fieldLineIndex];		
			if (element.required){
				element.validObj = new Spry.Widget.ValidationSelect("spanDataArea_"+element.uniqeID(), {validateOn:["change"], invalidValue:"0"});
			}
			//else element.validObj=new Spry.Widget.ValidationSelect("spanDataArea_"+element.uniqeID(), {validateOn:["change"]});
			
			counter+=5;
		}
	}
	
}

//Checkboxlardaki değerleri önyüzde kayıt edilebilmesi amacıyla hidden alana koyar ve form ile birlikte post edilerek kayıt edilir.
function SetCheckBoxValues(elementID,elementIndex,spanIndex){

	var name="fieldCheck_"+elementID+"_"+elementIndex+"_"+spanIndex;
	
	if ($(name).checked) 
		$("field_"+elementID+"_"+elementIndex).value+=$("spanValue_"+elementID+"_"+elementIndex+"_"+spanIndex).innerHTML+",";
	else $("field_"+elementID+"_"+elementIndex).value=
			$("field_"+elementID+"_"+elementIndex).value.replace($("spanValue_"+elementID+"_"+elementIndex+"_"+spanIndex).innerHTML+",","");
	
}

//Radio butondaki değerleri önyüzde kayıt edilebilmesi amacıyla hidden alana koyar ve form ile birlikte post edilerek kayıt edilir.
function setRadioButtonValues(elementID,elementIndex){
	var elementName="fieldRadio_"+elementID+"_"+elementIndex;
	//ie için optimize edildi.
	//eval("var obj=document.Gform."+elementName);
	eval("var obj=Gform."+elementName);
	
	//Ön tarafda element formun içinde olmadığından direk kendisini alıyoruz.
	if (obj==null) eval("var obj="+elementName);
	
	for(var ii=0;ii<obj.length;ii++){
		if (obj[ii].checked){
			$("field_"+elementID+"_"+elementIndex).value=obj[ii].value;
			break;
		}
	}
}
var pwdFieldName="";

function ClassElement(){
	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.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.dataSource=CONST_DS_USER; //
	this.mainFormID=0; //data source 2 olduğu durumda bağlanılan ana form id
	this.mainFieldIndex=-1; //data source 3 olduğu durumda bağlanılan ana alan id
	this.mainFieldID=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.mainFieldID2=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.uniqeID=function _uniqeID(){
		return this.elementID+'_' + this.index;
	}
	
	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+="}";
		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(formatFloatNumber(value));}";
				//jsonStr+=",type:'float'";
				break;
			
			case "currency_with_symbol":
				jsonStr+=",type:'float',align:'right',renderer:function(value){return formatCurrency(formatFloatNumber(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+'_' + this.index;
		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, {validateOn:["change"], invalidValue:"0"});
					}
					//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 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",isRequired:this.required,useCharacterMasking:true});';
					break;
				
				case "currency":
					validationStr='this.validObj=new Spry.Widget.'+validObjName+'("spry_"+uniqeID, "currency", {validateOn:["blur"],maxChars:15,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,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 _getHTML(withoutTrTag,formColumnCount,mapID,trIndex){
		var html="";
		var data="";
		var space="";
		var uniqeID=""; //element id lerinde kullanılıyor.
		var readOnlyText="";
		var hiddenField=false;
		if (this.readOnly) readOnlyText=" readonly ";
		
		//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;
		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){
					html += '<span id="spanDataArea_'+uniqeID+'">';
					html+='<input '+readOnlyText+ ' onkeyup="'+calculateStr + '" value="'+this.displayValue+'" type="text" name="field_'+ uniqeID + '" id="formFieldText" 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 + '">';
						html += '<option value="YTL">YTL</option>';
						html += '<option value="DOLAR">DOLAR</option>';
						html += '<option value="EURO">EURO</option>';
						html += '<option value="POUND">POUND</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="formFieldPassword" 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="formFieldPassword" style="' + this.dataAreaStyle.cssText + '" />'+this.displayValue+'</span></td>';
				break;

			case CONST_CONFIRM_PWD:	
				if (this.editable){
					html+= '<input type="password" name="confirmPwd" id="formFieldPassword" 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="formFieldPassword" style="' + this.dataAreaStyle.cssText + '" />'+this.displayValue+'</span></td>';
				break;
			
			case CONST_FIELD_TEXTAREA :
				if (this.editable){
					html += '<textarea name="field_'+ uniqeID + '" id="formFieldTextarea" style="' + this.cssText + '">'+this.displayValue+'</textarea>';
					html+='<br><span class="textareaRequiredMsg">*Zorunlu alan</span></span></td>';
				}
				else
					html+= '<span name="field_'+ uniqeID + '" id="formFieldTextarea" style="' + this.dataAreaStyle.cssText + '" />'+this.displayValue+'</span></td>';
				break;
			
			
			case CONST_FIELD_CHECKBOX :
				if (this.elementValue!=""){
					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 style="' + this.cssText + '" onclick="SetCheckBoxValues('+this.elementID+','+this.index+','+i+');" name="fieldCheck_'+ uniqeID+'_'+i+'" id="formFieldCheckBox" type="checkbox"><span id="spanValue_'+uniqeID+'_'+i+'">'+data[i]+'</span>' + space;
							}
						}
						html+='<br><span class="checkboxRequiredMsg">*Lütfen seçim yapınız</span></span></td>';
					}
					else{
						html+= '<span name="field_'+ uniqeID + '" id="formFieldCheckBox" style="' + this.dataAreaStyle.cssText + '" />'+this.displayValue+'</span></td>';	
					}
					
					html+='<input type="hidden" id="field_'+ uniqeID + '" name="field_'+ uniqeID + '">';
				}
				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)");
						
						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="'+calculateStr+'" name="field_'+uniqeID+'" id="fieldRadio" type="radio" value="'+value+'">'+display+space;
								else
									html += '<input style="' + this.cssText + '" onclick="'+calculateStr+'" name="field_'+uniqeID+'" id="fieldRadio" type="radio" value="'+value+'">'+display + space;
							}
						}
					}
					else{
						html+= '<span id="spanDataArea_'+uniqeID+'"></span>';
					}
				}
				else{
						html+= '<span name="field_'+ uniqeID + '" id="formFieldRadio" 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+'">';
					html += '<select onchange="'+calculateStr+'" name="field_'+ uniqeID + '" id="formFieldSelect" 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><br><span class="selectInvalidMsg">*Lütfen bir seçim yapınız</span><span class="selectRequiredMsg">*Lütfen bir seçim yapınız</span></span></td>';
				}
				else{
					html+= '<span name="field_'+ uniqeID + '" id="formFieldSelect" 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></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"+mapID,10)==0)
					html += '<textarea value="'+this.displayValue+'" name="field_'+ uniqeID + '" id="formFieldHTMLEditor" style="' + this.cssText + '"></textarea></td>';
				else if (this.editable && parseInt("0"+mapID,10)>0){
					html += '<textarea name="field_'+ uniqeID + '" id="formFieldHTMLEditor" style="' + this.cssText + '"></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>';	
		}
		//alert(html);
	    return html;
	}
}

