<HTML xmlns:stb="urn:guimachine-com:storyboard" xmlns:gml="urn:guimachine-com:gml">
<HEAD>
<@program name="NewSCDlg" exec="STUDIO" mode="MODAL">
	The <i>Create New SC</i> popup window is used for creating new SCs - active only for shared workspace.
	<param name="repositoryKey:str" >IN: the repository id in which the new DC will be created. must be UW_RK</param>
	<param name="repositoryName:str" >IN: the repository name (for display purposes)</param>
	<return type="true">Returns ~true iff a DC 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[dev:urn.UrnUtils.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
//TODO: replace string
WSETUP('#TEXT[XTIT_CREATE_NEW_SC]', 420, 150);
LISTEN('onInit', initDisplay);



var repositoryKey = null;
var repositoryName = null;

/////////////////////////////////////////////////////////////////////
// GKB SERVER CONNECT


////// Initialization functions
function initDisplay()
{
	repositoryKey = WPARAM("repositoryKey");
	repositoryName = WPARAM("repositoryName");

	fldRepository.value = repositoryName;

	FOCUS(fldSoftwareCompName);
	btnOk.enabled = true;
}


////// Get and Update functions
function updateValues()
{
	fldSC.value = fldSoftwareCompVendor.value + "_" + fldSoftwareCompName.value;
}

/////////////////////////////////////////////////
// DATA INPUT

document.onkeydown = function() {
	switch (event.keyCode) {
		case #[ENTER]: accept(); break;
		case #[ESC]: WCLOSE(); break;
	}
}

/*
- The name of the software component.
Only following characters are allowed: A..Z | a..z | 0..9 | '-' | '_' | '!'.
Comment: In VC we do not allow using '!' - for simplicity...
The length of the name must be at least one character and at most 40 characters.
*/
function isValidSCName(sc_name)
{
	if (sc_name.length > #[MAX_SC_NAME_LENGTH])
		return "#TEXT[XMSG_SC_NAME_TOO_LONG]".replace('{0}', '#[MAX_SC_NAME_LENGTH]');

	var re = new RegExp(/^[A-Z,a-z][A-Z,a-z,0-9,_,-]*[A-Z,a-z,0-9]+$/);
	var alpha = new RegExp(/^[A-Z,a-z]$/);

	if(!re.test(sc_name) && !alpha.test(sc_name))
		return "#TEXT[YMSG_SC_NAME_NOT_VALID]";

	return null;
}
/*
- The vendor of the software component.
Only following characters are allowed: A..Z | a..z | 0..9 |'-'| '.'.
The length of the vendor must be at least one character and at most 20 characters.
*/
function isValidSCVendor(sc_vendor)
{
	if (sc_vendor.length > #[MAX_SC_VENDOR_LENGTH])
		return "#TEXT[XMSG_SC_VENDOR_TOO_LONG]".replace('{0}', '#[MAX_SC_VENDOR_LENGTH]');;

	var re = new RegExp(/^[A-Z,a-z][A-Z,a-z,0-9,.,-]*[A-Z,a-z,0-9]+$/);
	var alpha = new RegExp(/^[A-Z,a-z]$/);

	if(!re.test(sc_vendor) && !alpha.test(sc_vendor))
		return "#TEXT[YMSG_SC_VENDOR_NOT_VALID]";

	return null;
}

/////////////////////////////////////////////////
// CREATE MODEL

function accept() {

	// validate SC name
	if (!fldSoftwareCompName.value) {
		FOCUS(fldSoftwareCompName);
		PROMPT('#TEXT[XMSG_SC_NAME_MISSING]', {icon:'ERROR'});
		return "";
	}

	if (!fldSoftwareCompVendor.value) {
		FOCUS(fldSoftwareCompVendor);
		PROMPT('#TEXT[XMSG_SC_VENDOR_MISSING]', {icon:'ERROR'});
		return "";
	}


	var err = isValidSCName(fldSoftwareCompName.value);
	if (err) {
		FOCUS(fldSoftwareCompName);
	    PROMPT(err, {icon:'ERROR'});
		return "";
	}

	var err2 = isValidSCVendor(fldSoftwareCompVendor.value);
	if (err2) {
		FOCUS(fldSoftwareCompVendor);
	    PROMPT(err2, {icon:'ERROR'});
		return "";
	}

	// connect to models library
	var ch=$ENV.channel2;

	var location = $ENV.createObject('dev:Location',
					'',
					'',
					repositoryKey,
					fldSoftwareCompName.value,
					fldSoftwareCompVendor.value,
					'',
					'',
					'');

	var res = ch.createSoftwareComponent(location);

	if (!res) {
		FOCUS(fldSoftwareCompName);
		PROMPT(ch.error, {icon:'ERROR'});
		return "";
	}


	var retObj = {};
	retObj.name = fldSC.value;
	retObj.urn = retObj.name;
	retObj.repositoryKey = fldRepository.value;
	WCLOSE(retObj);

}

</SCRIPT>


</HEAD>
<BODY>
<STB:DIALOG id=elmDialog>

	<STB:BOX glyph="DIALOG-AREA" style="padding:0 3;">

		<STB:BOX box="20 10 W H">
			<STB:INPUT  box="0 4 W-50 20" id=fldRepository type="str" label="#TEXT[XFLD_REPOSITORIES]" indent="160" enabled="false"/>
			<STB:INPUT  box="0 24 W-50 20" id=fldSoftwareCompName type="str" label="#TEXT[XFLD_SOFTWARE_COMPONENT_NAME]" onchange="updateValues()" indent="160"/>
			<STB:INPUT  box="0 44 W-50 20" id=fldSoftwareCompVendor type="str" label="#TEXT[XFLD_SOFTWARE_COMPONENT_VENDOR]" onchange="updateValues()" indent="160"/>
			<STB:INPUT  box="0 64 W-50 20" id=fldSC type="str" indent="100" mask="UPPERCASE" enabled="false" readonly="true" style="visibility:hidden" indent="160"/>
		</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>

