<HTML xmlns:stb="urn:guimachine-com:storyboard" xmlns:gml="urn:guimachine-com:gml">
<HEAD>
<@program name="NewModelDlg" exec="STUDIO" mode="MODAL">
	The <i>Create New Model</i> wizard, used for creating a new model based on a selected kit and set of kit features.
	<param name="modelUrn:str" default="">IN/OUT: the new model urn. </param>
	<param name="dontOpen:b" default="false">IN: indicates whether to avoid opening the new model. </param>
	<return type="true">Returns ~true iff a model was actually created</return>

   <copyright>(c) SAP AG 2003-2006. All rights reserved.</copyright>
</program@>


<META HTTP-EQUIV="MSThemeCompatible" CONTENT="no">

#INCLUDE[gml:defs.inc]

#USING[lib:Global.js]
#USING[lib:Xml.js]
#USING[lib:Box.htc]
#USING[lib:Button.htc]
#USING[lib:Choice.htc]
#USING[lib:Dialog.htc]
#USING[lib:Input.htc]
#USING[lib:Splitter.htc]

#INCLUDE[env:global_hotkeys.inc]

<SCRIPT language="JavaScript">

/////////////////////////////////////////////////////////////////////
// SETUP WINDOW

var windowHeight = 150;
var kitListTop = 35;
var kitListHeight = 'H';
var DtrHeight = 'H-110';
var productionKit = null;
var originalFolder = "";		//display name is local repository but when saving, you need the local development name


WSETUP('#TEXT[XTIT_CREATE_NEW_MDL]', 550, windowHeight);
LISTEN('onInit', initDisplay);

/////////////////////////////////////////////////////////////////////
// GKB SERVER CONNECT

function initDisplay() {
	reconnect(true);
	var urn=WPARAM('modelUrn')||'', modelInfo=$ENV.getMostRecentModel(), ext;
	if (!urn && $ENV.model) urn = $ENV.model.urn||'';
	if (!urn && modelInfo) urn = modelInfo.modelUrn||'';
	if (urn.indexOf("DTR.")<0) 	//save the local development name for saving 
		originalFolder = urn.substring(0, urn.indexOf('.'));
	ext = urn.substring(urn.lastIndexOf('.')+1);
	urn = urn.replace(/\.\w+$/,'');
	urn = normalizeFolderName(urn);
	switch(ext) {
		case('mdl'):
			if (urn.indexOf("DTR.")>-1) fldFolder.value = "";
			else fldFolder.value = (urn.indexOf('.')<0 ? '' : urn.replace(/\.[\w\-\!\~\$]+$/,''));
			break;
		case('dir'):
			if (urn.indexOf("DTR.")>-1) {
				urn = urn.replace("DTR.", "");
				urn = urn.replace(/0x([0-9][a-z])/gim,function(g1, g2) {return unescape('%'+g2);});
				fldSrcEnabled.selectItem("DTR", true);
				updateSrcCtrlMode();
				fldSoftwareComp.value = urn;
			}
			else fldFolder.value = urn;
			break;
	}
	fldModel.value = '';
	masterLang.domain = #[SUPPORTED_LANGS];
	masterLang.value="en";
	enableDtrControls();
	FOCUS(fldModel);
}


function initVendorsList() {
	var ch=$ENV.channel2;
	if (!ch.online) {
		PROMPT('#TEXT[XMSG_CONNECT_TO_MODELS_LIB]', {icon:'ERROR'});
		return false;
	}
	var vendors = ch.listVendors(false);
	if (!vendors) {
		PROMPT(ch.error, {icon:'ERROR'});
		return false;
	}
	else {
		fldVendor.domain = vendors;

		// set the default value to be the first vendor
		var index = vendors.indexOf(";");
		fldVendor.value = (index<1) ? vendors : vendors.substring(0, index);
		setPrefix();
	}
}
function initDTRDetails(){
	var ch=$ENV.channel2;
	if (!ch.online) {
		PROMPT('#TEXT[XMSG_CONNECT_TO_MODELS_LIB]', {icon:'ERROR'});
		return false;
	}
	var details = ch.listDTRDetails(false);
	if (!details) {
		PROMPT(ch.error, {icon:'ERROR'});
		return false;
	}
	var details=details.split("\n");
	var vendors = details[0];
	var prefixes = details[1];
	var domains =details[2];

	//set vendors
	fldVendor.domain = vendors;
	// set the default value to be the first vendor
	var index = vendors.indexOf(";");
	fldVendor.value = (index<1) ? vendors : vendors.substring(0, index);

	// set prefixes
	fldPrefix.domain = prefixes;
	// set the default value to be the first prefix
	index = prefixes.indexOf(";");
	fldPrefix.value = (index<1) ? prefixes : prefixes.substring(0, index);
	updateDevelCompVal();

	//set domains
	fldDomains.domain = domains;
	// set the default value to be the first domain
	var index = domains.indexOf(":");
	fldDomains.value = (index<1) ? domains : domains.substring(0, index);


}
function initDomainsList() {
	var ch=$ENV.channel2;
	if (!ch.online) {
		PROMPT('#TEXT[XMSG_CONNECT_TO_MODELS_LIB]', {icon:'ERROR'});
		return false;
	}
	var domains = ch.listDomains(false);
	if (!domains) {
		PROMPT(ch.error, {icon:'ERROR'});
		return false;
	}
	else {
		fldDomains.domain = domains;

		// set the default value to be the first domain
		var index = domains.indexOf(":");
		fldDomains.value = (index<1) ? domains : domains.substring(0, index);
	}
}

function setPrefix() {
	var ch=$ENV.channel2;
	if (!ch.online) {
		PROMPT('#TEXT[XMSG_CONNECT_TO_MODELS_LIB]', {icon:'ERROR'});
		return false;
	}

	var prefixes = ch.listPrefixes(fldVendor.value, false);
	if (!prefixes) {
			PROMPT(ch.error, {icon:'ERROR'});
			return false;
	}
	fldPrefix.domain = prefixes;

	// set the default value to be the first prefix
	index = prefixes.indexOf(";");
	fldPrefix.value = (index<1) ? prefixes : prefixes.substring(0, index);

	updateDevelCompVal();
}


function initScList() {
	var ch=$ENV.channel2;
	if (!ch.online) {
		PROMPT('#TEXT[XMSG_CONNECT_TO_MODELS_LIB]', {icon:'ERROR'});
		return false;
	}
	var res = ch.listFolders("", "SC", false);
	if ((!res) || (res.length == 0)) {
		PROMPT(ch.error, {icon:'ERROR'});
		return false;
	}
	for (var i=0, list=[], len=res.length; i<len; i++)
	      list[i] = res[i].name;
	fldSoftwareComp.domain = JOIN(list,';');
	if (fldSoftwareComp.value == "") fldSoftwareComp.value = res[0].name;
}


function getMdlNamePart() {
	var modelName = fldModel.value||'';
	return modelName.substring(modelName.lastIndexOf("/")+1);
}


function getFolderNamePart() {
	var modelName = fldModel.value||'';
	var folderName = '';

	var lIndex = modelName.lastIndexOf("/");
	if (lIndex > 0)
		folderName  = modelName.substring(0,lIndex).replace(/\/(\w)/g,".$1");
	return folderName;
}


function updateDevelCompVal() {
	fldDevelComp.value = fldVendor.value + "/" + fldPrefix.value + "/" + getFolders() + getMdlNamePart();
}


function isSrcCtrlEnabled() {
	selectedKeys = fldSrcEnabled.selection;
	return selectedKeys["DTR"];
}


function reconnect(firstTime) {
	btnOk.enabled = false;
	normalizeInputs();
	var ch=$ENV.channel2;
	if (!ch.connect()) {
		clearKitsDisplay();
		PROMPT(ch.error, {icon:'ERROR'});
		return;
	}

	if (!updateKitsDisplay(firstTime)) return;
	//fldFolder.value = '';
	btnOk.enabled = true;
}


function getFolders() {
	var folderName = fldFolder.value||'';
	var folderFromMdlName = getFolderNamePart()
	if (folderFromMdlName)
		folderName  = (folderName ? folderName+'.' : '')+folderFromMdlName;

	var index = folderName.indexOf('.');
	var folders= "";
	if (index > 0) {
		folders = folderName.substring(index + 1).replace(/\./g, '\/');
		folders+= "/";
	}
	return folders;
}

/////////////////////////////////////////////////
// KITS SELECTION
var _manifest;

function clearKitsDisplay() {
	fldKits.domain = null;
	//fldFeatures.domain = null;
	_manifest = null;
}

function updateKitsDisplay(firstTime) {

	_manifest = null;
	var ch=$ENV.channel2;
	if (!ch || !ch.online) return;

	// get and parse the kits manifest
	_manifest = ch.getKitsManifest();
	if (!_manifest) {
		clearKitsDisplay();
		PROMPT('#TEXT[XMSG_READ_KITS_MANIFEST_FAILED] ('+ch.error+')', {icon:'ERROR'});
		return false;
	}

	/* NadavL - commented out due to CSN 4710857 2008 - 712_ws45:annoying error message in the console
	 * Note - these messages might be bogus anyway, as the corresponding kit might never get loaded (not used by any production kit)
	if (_manifest.errors.length>0) {
		//PROMPT('<b>#TEXT[XMSG_ERRORS_IN_KITS_MANIFEST]:</b><ul style="margin:10 0 0 20"><li>'+JOIN(_manifest.errors,'<li>')+'</ul>', {icon:'ERROR'});
		for (var k in _manifest.errors) {
					var err = _manifest.errors[k];
					#LOG[4, err];
		}
	}*/

	//check if no production kit was sent from url - then display the kits section
	productionKit = $ENV.getProductionKit();
	if(productionKit)
	{
		fldKits.domain = [{value:productionKit, text:''}];
		fldKits.value = productionKit;
		return true;
	}
	windowHeight = 360;
	kitListHeight = 'H+25';
	kitListTop = 0;
	DtrHeight = 'H-115';
	WRESIZE(550, windowHeight);
	SET_BOX(elmModelsBox, 0, kitListTop, 'W', kitListHeight);

	// fill the production kits list
	var A=[], K=_manifest.kits;
	for (var k in K) {
		var kit = K[k];
		if (kit.type != 'P') continue;
		A.push({value:k, text:'<div style="padding-left:40; height:36; background:3 3 no-repeat url(#URL[%kit.icon%])"><span style="float:right">(V'+kit.version+')</span><b>'+kit.label+'</b><br>'+kit.summary+'</div>'});
	}
	fldKits.domain = A;

	// select a default production kit
	if (firstTime && $ENV.kitsConfig) {
		var config = $ENV.kitsConfig;
		fldKits.value = config.production.urn;
	} else {
		fldKits.selectFirst();
	}
	return true;
}

// NadavL 15/10/2007
// Deleted 2 functions, code line FrwkDev_stream, last CL before this one was 68063
// The deleted functions all deal with selection of extension kits, and both were deactivated since 18/7/06
//function updateFeaturesDisplay(firstTime)
//function onFeatureChange()
//

/////////////////////////////////////////////////
// DATA INPUT

document.onkeydown = function() {
	switch (event.keyCode) {
		case #[ENTER]: accept(); break;
		case #[ESC]: WCLOSE(); break;
	}
}

function normalizeInputs() {
	fldModel.value  = LOWER(fldModel.value);
	fldFolder.value = LOWER(fldFolder.value.replace(/^\.+|\.+$/g,'').replace(/\.+/g,'.'));
	fldFolder.value = normalizeFolderName(fldFolder.value);
	if (isSrcCtrlEnabled() == true)
		updateDevelCompVal();
}

//change local development name to local repository (which is the display name for local dev)
function normalizeFolderName(name) {
	var bDTR = name.indexOf("DTR.")>-1;
	var prefix = '#SYS[LOCAL_DEVELOPMENT_DISPLAY_NAME]';
	if(!bDTR && prefix.length > 0) {
		var pos = name.indexOf('.');
		if(pos < 0)
			name = "";	//remove local development name
		else
			name = name.substring(pos);
		name = prefix + name;
	}

	return name;
}

function selectFolder() {
	var res=MODAL('#URL[dev:common.SelectModelDlg.htm]', {modelUrn:fldFolder.value, scope:'FOLDERS', title:'#TEXT[XTIT_SELECT_FOLDER]'}, true);
	if (!res) return;
	FOCUS(fldFolder);
	fldFolder.value = (res||'').replace(/\.\w+$/,'');
	normalizeInputs();
}


function updateSrcCtrlMode() {
	enableDtrControls();
	if (isSrcCtrlEnabled() == true) {		
		setTimeout(initDTRDetails,0);
		setTimeout(initScList,0);
	}
}


// Enable DTR controls according to the src-ctrl enable selection
function enableDtrControls() {
	var ch=$ENV.channel2;

	fldSrcEnabled.enabled = ch.isJ2EE();
	if (isSrcCtrlEnabled()) {
		WRESIZE(550, windowHeight+160);
		elmSrcEnabled.style.display="inline";
		SET_BOX(elmModelsBox, 0, kitListTop, 'W', DtrHeight);
	}
	else
	{
		WRESIZE(550, windowHeight);
		elmSrcEnabled.style.display="none";
		SET_BOX(elmModelsBox, 0, kitListTop, 'W', kitListHeight);
	}
	var mode = (isSrcCtrlEnabled() == true) ? false : true;
	DISABLE(fldSoftwareComp, mode);
	DISABLE(fldVendor, mode);
	DISABLE(fldPrefix,  mode);
	DISABLE(fldActivityDesc, mode);
	DISABLE(fldDomains, mode);
	DISABLE(fldSupportComp, mode);
}


function setVisibility(visibility) {
	elmSrcEnabled.style.visibility = visibility;
}

function updateDomain() {
	var dcDomain = fldDomains.value;
}
/////////////////////////////////////////////////
// CREATE MODEL

function accept() {
	var config;
	SETVAR('masterLanguage', masterLang.value);

	// calculate kits configuration (if kit was loaded when application opened, it's already defined)
	if(productionKit)
		config = $ENV.getProductionKitConfig();
	else
		config = _manifest && _manifest.computeConfig(fldKits.value) || null;

	if (!config || config.length == 0) {
		FOCUS(fldModel);
		PROMPT('#TEXT[XMSG_COMPUTE_KIT_CONFIG_FAILED]', {icon:'ERROR'});
		return false;
	}

	// validate model name
	var modelName=fldModel.value||'';
	if (!modelName) {
		FOCUS(fldModel);
		PROMPT('#TEXT[XMSG_MDL_NAME_MISSING]', {icon:'ERROR'});
		return false;
	}

	//check that model name does not start with number
	var checkModelName = parseInt(modelName);
	if(checkModelName){
		FOCUS(fldModel);
		PROMPT('#TEXT[XMSG_MDL_NAME_STARTS_WITH_NUMBER]', {icon:'ERROR'});
		return false;
	}

	//check that the user does not create folder with the name 'dtr'
	if(modelName.indexOf('dtr\/')==0 || modelName.indexOf('\/dtr\/')>-1){
		FOCUS(fldModel);
		PROMPT("#TEXT[XMSG_CANNOT_CREATE_FOLDER_DTR]", {icon:'ERROR'});
		return false;
	}



	// connect to models library
	var ch=$ENV.channel2;
	if (!ch.online) {
		PROMPT('#TEXT[XMSG_CONNECT_TO_MODELS_LIB]', {icon:'ERROR'});
		return false;
	}

	// Get the src ctrl enable selection
	selectedKeys = fldSrcEnabled.selection;
	var isSrcCtrlEnabled = selectedKeys["DTR"];
	var isDC = (isSrcCtrlEnabled == true)? true : false;

	var err = $ENV.isValidName(modelName, isDC);
	if (err) {
		FOCUS(fldModel);
	    PROMPT(err, {icon:'ERROR'});
		return false;
	}

	if (isSrcCtrlEnabled == true) {
		// Creation of a development component
		var softwareComp = fldSoftwareComp.value;
		var develComp =    fldDevelComp.value;
		var activityDesc = fldActivityDesc.value || '';
		var dcPrefix = fldPrefix.value || '';
		var dcDomain = fldDomains.value;
		var dcSupportComp = fldSupportComp.value;

		if ((!softwareComp) || (!develComp) || (!dcSupportComp) ) {
			FOCUS(fldModel);
			PROMPT('#TEXT[XMSG_FIELDS_MISSING]', {icon:'ERROR'});
			return false;
		}
		// check that the model name (including prefix but excluding vendor) does not not exceed the max limit
		var err = $ENV.isValidName(fldPrefix.value + "/" + getFolders() + getMdlNamePart(), true);
		if (err) {
			FOCUS(fldModel);
		    PROMPT(err, {icon:'ERROR'});
      		return false;
		}
	}

	// create model
	var folderName = fldFolder.value.replace('#SYS[LOCAL_DEVELOPMENT_DISPLAY_NAME]', originalFolder);
	//when the prefix of the previous opened model is DTR, the new model name gets no prefix, so just remove the '.' of the prefix
	if(folderName.charAt(0) =='.')
		folderName = folderName.slice(1);
	var modelUrn = (folderName ? folderName+'.' : '')+modelName.replace(/\/(\w)/g,".$1")+'.mdl';

	if (isSrcCtrlEnabled)
		var res = ch.createFolder(modelUrn, masterLang.value, isSrcCtrlEnabled, softwareComp, develComp, activityDesc, dcPrefix, dcDomain,dcSupportComp);
	else
		var res = ch.createFolder(modelUrn, masterLang.value);
	if (!res) {
		FOCUS(fldModel);
		PROMPT(ch.error, {icon:'ERROR'});
		return false;
	}

	if (ch.isJ2EE()) modelUrn = res;

	// create kits configuration file
	config.readonly = "false";
	var configUrn = ch.toModelFile(modelUrn, '_config.xml');
	var configXml = _manifest.printConfigXML(config);
	var res = ch.writeFile(configUrn, configXml);
	if (!res) {
		FOCUS(fldModel);
		PROMPT(ch.error, {icon:'ERROR'});
		return false;
	}

	// return details of created model
	var prm=WPARAM();
	if (prm) {
		prm.modelUrn  = modelUrn;
		prm.isNewRepositoryModel = (isSrcCtrlEnabled) ? true : false;
	}
	if (!prm || !BOOL(prm.dontOpen)) {
		var nodeStatus = (isSrcCtrlEnabled) ? #[ADDED_TO_DTR] : #[LOCAL];
		$ENV.openModel(ch.toModelHandle(modelUrn, nodeStatus));
	}

	WCLOSE(true);
}


</SCRIPT>

<STYLE type="text/css">
.SMLBTN { border-color:#[WHT]; }

.PRODKIT		 { border:window-inset #[WHT] 2; background:#[WHT]; width:100%; overflow-x:hidden; overflow-y:auto; cursor:default }
.PRODKIT-OFF { font:normal 10px tahoma; padding:3; height:auto; }
.PRODKIT-ON  { font:normal 10px tahoma; padding:3; height:auto; background:#[BG1]; }

</STYLE>

</HEAD>

<BODY>
<STB:DIALOG id=elmDialog>

	<STB:BOX glyph="DIALOG-AREA" style="padding:0 3;">

		<STB:BOX id=elmModelsBox box="0 30 W 100" > <!--H-95-->
				<STB:BOX box="0 5 W H-120" >
					<DIV box="1 1 W-1 17" style="border:groove #[WHT] 2; border-bottom:none; padding:0 3;font-weight:bold">#TEXT[XTIT_MODEL_TYPE]</DIV>
					<STB:CHOICE box="0 17 W H-17" id=fldKits type="select" glyph="PRODKIT" style="background:#[WHT];" />
				</STB:BOX>

			<STB:INPUT  box="0 H-110 W-44 20" id=fldFolder type="str" label="#TEXT[XFLD_FOLDER]" indent="45" enabled="false" mask="LOWERCASE" filter="[\w\.]" onchange="normalizeInputs()"/>
			<STB:BUTTON box="W-44 H-108 44 18" glyph="THINBTN" id=btnBrowse title="#TEXT[XTOL_SELECT_FOLDER]" onclick="selectFolder()">#TEXT[XBUT_BROWSE_FILE]</STB:BUTTON>
			<STB:INPUT  box="0 H-89 W-44 20" id=fldModel type="str" label="#TEXT[XFLD_NAME]" indent="45" mask="LOWERCASE" filter="[a-zA-Z0-9/]" onchange="normalizeInputs()"/>
			<STB:INPUT  box="W-294 H-68 250 20" id=masterLang type="enum" label="#TEXT[XFLD_MASTER_LANG]" indent="100"/><br/>
			<STB:CHOICE box="43 H-64 124 20" id=fldSrcEnabled type="checklist" domain="DTR:#TEXT[XTIT_ENABLE_SRC_CONTROL]" value="DTR" onclick="updateSrcCtrlMode()" style="color:#[BLK]"/>
		</STB:BOX>

		<STB:BOX id="elmSrcEnabled" box="45 H-170 W-89 300" style="display:none;">		
			<STB:BOX box="130 24 W-130 20">
				<STB:INPUT  box="0 0 W/2 H" id=fldVendor type="enum" label="#TEXT[XFLD_VENDOR]" onchange="setPrefix()" indent="45"/>
				<STB:INPUT  box="W/2 0 W/2 H" id=fldPrefix type="enum" label="#TEXT[XFLD_PREFIX]" onchange="updateDevelCompVal()" indent="45"/>
			</STB:BOX>
			
			<STB:INPUT  box="0 48 W 20" id=fldDevelComp type="str" label="#TEXT[XFLD_DEVELOPMENT_COMPONENT]" indent="130" mask="LOWERCASE" filter="[\w\.]" enabled="false"/>
			
			<STB:INPUT  box="0 70 W 20" id=fldSoftwareComp type="enum" label="#TEXT[XFLD_SOFTWARE_COMPONENT]" indent="130"/>
		
			<STB:INPUT box="0 90 W 20" id=fldDomains type="enum" label="#TEXT[XFLD_DOMAINS]" tooltip="#TEXT[XTOL_TECHNICAL_DOMAIN]" indent="130" onchange="updateDomain()"/>
	
			<STB:INPUT  box="0 110 W 20" id=fldSupportComp type="str" label="#TEXT[XFLD_SUPPORT_COMPONENT]<br>#TEXT[XFLD_SUPPORT_COMP_EXAMPLE]" indent="130" mask="LOWERCASE" />




<STB:BOX id="ex" box="0 130 W 20">	
<div> #TEXT[XFLD_SUPPORT_COMP_EXAMPLE] </div>
		
</STB:BOX>
			<STB:INPUT box="0 150 W 20" id=fldActivityDesc type="text" label="#TEXT[XFLD_ACTIVITY_DESC]" indent="130" tooltip="#TEXT[XTOL_INSERT_ACTIVITY_DESC]" />

		</STB:BOX>

	</STB:BOX>

	<STB:BOX glyph="BUTTONS-AREA">
		<STB:BUTTON id=btnOk onclick="accept()">#TEXT[XBUT_OK]</STB:BUTTON>
		<STB:BUTTON id=btnCancel onclick="WCLOSE()">#TEXT[XBUT_CANCEL]</STB:BUTTON>
	</STB:BOX>

</STB:DIALOG>
</BODY>

</HTML>