function imposeMaxLength(Object, MaxLen)
{
  return (Object.value.length <= MaxLen);
}

function trimAll(sString) {
	if (sString === null) sString = '';
	while (sString.substring(0,1) == ' ') {
		sString = sString.substring(1, sString.length);
	}
	while (sString.substring(sString.length-1, sString.length) == ' ') {
		sString = sString.substring(0,sString.length-1);
	}
	return sString;
}

function editForm(formName) {

	function findIndex(edit_name) {
		var edit_index=0;
		$('#'+formName+' *[name^='+edit_name+']').each(function(x) {
			var i = $(this).attr('name').substring(edit_name.length);
			if ( Number(i) >= Number(edit_index) ) edit_index = Number(i)+1;
		});
		return edit_index;
	}
	
	function editElement(el) {
		var disabled=( ( eval(el.attr('edit_disabled')) )?' disabled="disabled"' : '');
		if(eval(el.attr('edit_isempty'))) el.html('');
		switch (el.attr('edit_type')) {
			case 'checkbox':
				var edit_name=el.attr('edit_name');
				if ( eval(el.attr('edit_checked')) ) var checked=' checked="checked"'; else var checked='';
				el.html('<input name="'+edit_name+'" type="checkbox" dojoType="dijit.form.CheckBox" value="true"'+checked+disabled+'/>');
				break;
			case 'image':
				break;
			case 'hidden':
				el.html('<input style="display:none" name="'+el.attr('edit_name')+'" type="text" dojoType="dijit.form.TextBox" value="'+el.html()+'"/>');
				break;
			case 'link':
				var edit_name=el.attr('edit_name');
				if ( eval(el.attr('edit_group')) ) edit_name = edit_name + findIndex(edit_name);
				el.html('<span>'+el.text()+':</span> <input name="'+edit_name+'" type="text" dojoType="dijit.form.TextBox" value="'+el.find('a').attr('href')+'"/>');
				break;
			case 'combolink':
				if ( eval(el.attr('edit_combo_free')) ) var comboType='ComboBox'; else var comboType='FilteringSelect';
				var selected="";
				var edit_name=el.attr('edit_name');
				if ( eval(el.attr('edit_group')) ) edit_name = edit_name + findIndex(edit_name);
				var edit_name2='combo_'+edit_name;
				if ( (el.attr('edit_onchange') != '') && (el.attr('edit_onchange') !== undefined) ) var changeEvent='onkeypress="'+el.attr('edit_onchange')+'" onchange="'+el.attr('edit_onchange')+'" '; else var changeEvent='';
				var combo='<select name="'+edit_name2+'" '+changeEvent+'dojoType="dijit.form.'+comboType+'" autocomplete="true">';
				var foundText=false;
				var dat=eval("("+el.attr('edit_data')+")");
				if (dat !== undefined) {
					ids=dat.ids;
					vals=dat.vals;
					for (var i=0; i<ids.length; i=i+1) {
						if ( trimAll(vals[i]) == trimAll(el.text()) ) {
							foundText=true;
							selected='selected="selected"';
						} else {
							selected='';
						}
						if (comboType == 'ComboBox') 
							combo+='<option '+selected+' value="'+vals[i]+'">'+vals[i]+'</option>';
						else
							combo+='<option '+selected+' value="'+ids[i]+'">'+vals[i]+'</option>';
					}
				}
                if (comboType=='ComboBox') if (!foundText) if (el.text()!='') combo+='<option selected="selected" value="'+el.text()+'">'+el.text()+'</option>';
				combo+='</select>';
				el.html('<span>'+combo+':</span> <input name="'+edit_name+'" type="text" dojoType="dijit.form.TextBox" value="'+el.find('a').attr('href')+'"/>');
				break;
			case 'text':
				var watermark  = ( el.attr('edit_watermark'))?" placeHolder='" + el.attr("edit_watermark") + "' ":"";
				var maxlength = ( ( el.attr('edit_maxlength') != "" )?' maxlength="'+el.attr('edit_maxlength')+'"' : '' );
				var required = ( ( el.attr('edit_required') == "true" )?' required="true" ' : '' );
				var edit_name=el.attr('edit_name');
				var controlType = ( ( required == '')?"dijit.form.TextBox":"dijit.form.ValidationTextBox" );
				if ( eval(el.attr('edit_group')) ) edit_name = edit_name + findIndex(edit_name);
				var html=el.html();
				if ( el.find('a').text() != '' ) html = el.find('a').text();
				el.html('<input name="'+edit_name+'" type="text" dojoType="'+ controlType +'"'+maxlength+' ' + required + watermark + ' value="'+html+'"/>');
				break;
			case 'textarea':
				if ( el.attr('edit_maxlength') != "" ) var maxlength = ' onkeypress="return imposeMaxLength(this, '+el.attr('edit_maxlength')+');"'; else var maxlength = '';
				el.html('<textarea name="'+el.attr('edit_name')+'" dojoType="dijit.form.Textarea"'+ maxlength +' style="width:100%">'+el.html()+'</textarea>');
				break;
			case 'combo':
				var watermark  = ( el.attr('edit_watermark'))?" placeHolder='" + el.attr("edit_watermark") + "' ":"";
				var comboType = ( ( eval(el.attr('edit_combo_free')) )?'ComboBox':'FilteringSelect');
				var selected = "";
				var edit_name = el.attr('edit_name');
				edit_name += (( eval(el.attr('edit_group')) )?findIndex(edit_name):'');
				var changeEvent = ( (el.attr('edit_onchange') != '') && (el.attr('edit_onchange') !== undefined) )?'onkeypress="'+el.attr('edit_onchange')+'" onchange="'+el.attr('edit_onchange')+'" ':'';
				var s='<select name="'+edit_name+'" '+changeEvent+'dojoType="dijit.form.'+comboType+'" autocomplete="true" ' + watermark;
				var o = ''; //options
				var dat = eval("("+el.attr('edit_data')+")");
				ids=dat.ids;
				vals=dat.vals; 
				var foundText=false;
				var defval = trimAll(el.text());
				if(defval=='' && (dat.selected || dat.selected==null)){
					defval = trimAll(getDefaultDataText(dat));
				}
				for (var i=0; i<ids.length; i=i+1) {
					if ( trimAll(vals[i]) == defval ) {
						foundText=true;
						selected='selected="selected"';
					} else {
						selected='';
					}
					if ( comboType == 'ComboBox' )
						o+='<option '+selected+' value="'+vals[i]+'">'+vals[i]+'</option>';
					else
						o+='<option '+selected+' value="'+ids[i]+'">'+vals[i]+'</option>';
				}
                if ( comboType == 'ComboBox' && foundText == false && el.text() != ''){
					foundText = true;
					//s+='displayedValue="' + el.text()+ '" ';
					//o+='<option selected="selected" value="'+el.text()+'">'+el.text()+'</option>';
				}
				if( foundText == false && (defval!='' || defval==null)) {
					s+='displayedValue="' + ((defval==null)?'':defval) + '" ';
				}
				s = s +">"+ o + '</select>';
				el.html(s);
				break;
	//			default:alert('unknown field type');
		}
		el.removeClass('editable');
        el.click(function(){
            focusedDijitItem = el;
        });
		if ( el.attr('edit_style') !== undefined ) {el.find("*:first").css(eval("("+el.attr('edit_style')+")"));};
        try {
    		dojo.parser.parse(el[0]);
        } catch(err) {
        };
	}	
	var f=$('#'+formName)[0];
	var jb;
	
	var getDefaultDataText = function(d){
		var found = false;
		if(d.selected==null){
			return null;
		}else if(typeof d.selected === "string"){
			return d.selected;
		}else if(d.selected.id){
			for(var i =0; i<d.ids.length; i+=1){
				if(d.ids[i] == d.selected.id){
					found = i;
					break;
				}
			}
			if(found === false){
				return (d.vals.length>0)?d.vals[0]:'';
			}
			return d.vals[found];
		}else if(d.selected.text){
			return d.selected.text;
		}
		return (d.vals.length>0)?d.vals[0]:'';
	};
	var onSave = function () {
		var res = eval(f.getAttribute("onvalidate"));
		if ( res ) {
			appdb.utils.DataWatcher.Registry.deactivate(appdb.utils.DataWatcher.Registry.getActiveName());
			if(managedSciCons && managedSciCons != null){
				managedSciCons.setupForm($('#'+formName)[0]);
			}
			if(managedAppUrlsEditor && managedAppUrlsEditor != null){
			 managedAppUrlsEditor.setupForm($('#'+formName)[0]);
			}
			sendform($('#'+formName)[0]);
			jb.hide();
			showAjaxLoading();
		}
	}	

	if ( f !== undefined ) {
		if ($('#'+formName).find('*[name=save]')[0] === undefined) {
			if ( $("#savedetails").length == 0 ) {
				var jbc = $('<a id="cancelsavedetails" style="vertical-align: middle; padding-right: 5px;" href="#"><img height="16px" style="vertical-align:middle; padding-right: 3px" src="/images/stop.png" border="0"/>Cancel</a>');
				var jb = $('<a id="savedetails" style="vertical-align: middle; padding-right: 5px;" href="#"><img height="16px" style="vertical-align:middle; padding-right: 3px" src="/images/diskette.gif" border="0"/>Save</a>');
				jb.attr("align","right");
				jb.attr("callback",f.callback);
				jb.attr("callback_data",f.callback_data);
				jbc.prependTo($("#toolbarContainer div:first"));
				jb.prependTo($("#toolbarContainer div:first"));
				if ( (f.getAttribute("onvalidate") != '') && (f.getAttribute("onvalidate") !== null) ) {
	//				b.setAttribute("onclick","if ( "+f.getAttribute("onvalidate")+" ) {sendform($('#"+formName+"')[0]);};");
					jb.click(onSave);
				} else {
	//				b.setAttribute("onclick","sendform($('#"+formName+"')[0]);");
					jb.click(function() {
						if(managedSciCons && managedSciCons != null){
							managedSciCons.setupForm($('#'+formName)[0]);
						}
						sendform($('#'+formName)[0]);
						jb.hide();
						showAjaxLoading();
					});
				}
				jbc.click(function(){
					eval(f.getAttribute("cancelcallback"));
				});
			}
		};
		$('#'+formName+' .editable').each(function(i,e){
			editElement($(this));
		});
		
		separateMultipleItems($("#urldiv"+dialogCount).find("span.app-url"));
		separateMultipleItems($("#vodiv"+dialogCount).find("span.app-vo"));
		separateMultipleItems($("#mwdiv"+dialogCount).find("span.app-mw"));
		separateMultipleItems($("#countryDiv"+dialogCount).find("span.app-countryFlag"));

		var anv = $("#appnamevalidator");
		var appname = $($("#"+formName).find("input[name='name']")[0]);
		if(anv.length>0){
			$(anv).css("display","inline-block");
			var na = (new appdb.components.NameAvailability({container : anv,input:appname}));
            na.subscribe({event : "valid",callback:function(v){
                $("#savedetails").show();
            }});
            na.subscribe({event : "invalid",callback: function(v){
                $("#savedetails").hide();
            }});
		}
		$("span.mandatoryflag").css("display","inline-block");
		//dojo.parser.parse(f);
	};
}

