//Guideline @ 2009 Jun 24
//Each time changing content, increase file's version number at style2.jin
var	gDOM = null;
var	oDOM = null;
var tDOM = null;
var	gOPcount = 0;//getCookie("count");
var	ACDCinput =	"";
var	Vmax = "";
var	Vmin = "";
var	Vo0	= "";
var	Io0	= "";
var	Vo1	= "";
var	Io1	= "";
var	Vo2	= "";
var	Io2	= "";
var	Vo3	= "";
var	Io3	= "";
var	Vo4	= "";
var	Io4	= "";
var	Stack =	new	Array();
var	Sign =	new	Array();
var i;
var bShowVo;
var Loading0 = -1;
var Loading1 = -1;

var circuitImageVer = 1;

var EffNumOutput = 5;

for(i =	1; i<EffNumOutput;	i++) {
	Stack[i] = false;

}
for(i =	0; i<EffNumOutput;	i++) {
	Sign[i] = 1;
}

var	defaultBgColor;
var	detailSpecWin =	null;	

var	generate = false;
var	OptimizeIndex =	1;
var	optimize = false;

var ValidOP = 0;

function Load(){
	gDOM = document;
	if (top.frames["topFrame"])
	tDOM = top.frames["topFrame"].document;
	if (top.frames["mainFrame"])
	oDOM = top.frames["mainFrame"].document;
	if(tDOM)
	if(tDOM.getElementById("ValidOP"))
	ValidOP = tDOM.getElementById("ValidOP").value;	
}

function Maximize(){
}

function getOPimg (k, stack, sign, topologytype) {
	var res = "";
	if(stack && sign>0){
		res = "images/circuit/"+topologytype+"_schematic_output"+k+"_stack_" + circuitImageVer + ".png";
	} else if(stack && sign<0){
		res = "images/circuit/"+topologytype+"_schematic_output"+k+"_stack_neg_" + circuitImageVer + ".png";
	} else if(!stack && sign<0){
		res = "images/circuit/"+topologytype+"_schematic_output"+k+"_neg_" + circuitImageVer + ".png";
	} else {
		res = "images/circuit/"+topologytype+"_schematic_output"+k+ "_" + circuitImageVer + ".png";
	}
	return res;
}

function addOP(topology,MaxNumOP, size_offset){
	var	obj;
	var	OP;
	var	elementNode;
	var	subNode;
	var	fontNode;
	var	textNode;
	var	brNode;
	var	italicNode;
	Load();
	if(!bShowVo){
		if (gOPcount < MaxNumOP-1){
			OP = gDOM.getElementById("Loading1");	
			if(OP){
				OP.disabled = false;
			}
			OP = gDOM.getElementById("Load1");	
			if(OP){
				OP.style.visibility="visible";
			}
		}
	}

	if (gOPcount < MaxNumOP-1){
		gOPcount++;

		OP = gDOM.getElementById("OP"+gOPcount+"1");	
		fontNode = gDOM.createElement("font");
		fontNode.setAttribute("size",-3);
		fontNode.setAttribute("id", "font"+gOPcount+"_1");	
		textNode = gDOM.createTextNode("Vo");
		fontNode.appendChild(textNode);
		subNode = gDOM.createElement("sub");
		textNode = gDOM.createTextNode((gOPcount+1));
		subNode.appendChild(textNode);		
		fontNode.appendChild(subNode);		
		if(OP)
			OP.appendChild(fontNode);
		
		obj = gDOM.getElementById("font"+gOPcount+"_1");
		obj.style.fontStyle	= "italic";
		obj.style.fontSize = "10px";
		obj.style.fontFamily = "Times New Roman";
			obj.className = "SymbolFontStyle";

		OP = gDOM.getElementById("OP"+gOPcount+"2");
		fontNode = gDOM.createElement("font");
		fontNode.setAttribute("size",-3);
		fontNode.setAttribute("id", "font"+gOPcount+"_2");
		elementNode = gDOM.createElement("input");
		elementNode.setAttribute("type", "text");
		elementNode.setAttribute("name", "Vo"+gOPcount);
		elementNode.setAttribute("id", "Vo"+gOPcount);
		elementNode.setAttribute("size", (size_offset+1));
		elementNode.className = "InputFontStyle";
		fontNode.appendChild(elementNode);
		textNode = gDOM.createTextNode(" V");
		fontNode.appendChild(textNode);
		if(OP)
			OP.appendChild(fontNode);
		
		obj = gDOM.getElementById("font"+gOPcount+"_2");
		obj.style.fontStyle	= "normal";
		obj.style.fontSize = "10px";
		obj.style.fontFamily = "Times New Roman";
		
		if(obj){
			obj.className = "SymbolFontStyle";
			obj = gDOM.getElementById("Vo"+gOPcount);
			obj.style.color = "#000000";
		}
				
		OP = gDOM.getElementById("OP"+gOPcount+"3");	
		fontNode = gDOM.createElement("font");
		fontNode.setAttribute("size",-3);
		fontNode.setAttribute("id", "font"+gOPcount+"_3");
		textNode = gDOM.createTextNode("Io");
		fontNode.appendChild(textNode);
		subNode = gDOM.createElement("sub");
		textNode = gDOM.createTextNode((gOPcount+1));
		subNode.appendChild(textNode);		
		fontNode.appendChild(subNode);		
		if(OP)
			OP.appendChild(fontNode);
		
		obj = gDOM.getElementById("font"+gOPcount+"_3");
		obj.style.fontStyle	= "italic";
		obj.style.fontSize = "10px";
		obj.style.fontFamily = "Times New Roman";
		obj.className = "SymbolFontStyle";
		
		OP = gDOM.getElementById("OP"+gOPcount+"4");
		fontNode = gDOM.createElement("font");
		fontNode.setAttribute("size",-3);
		fontNode.setAttribute("id", "font"+gOPcount+"_4");
		elementNode = gDOM.createElement("input");
		elementNode.setAttribute("type", "text");
		elementNode.setAttribute("name", "Io"+gOPcount);
		elementNode.setAttribute("id", "Io"+gOPcount);
		elementNode.setAttribute("size", (size_offset+1));
		elementNode.className = "InputFontStyle";
		fontNode.appendChild(elementNode);
		textNode = gDOM.createTextNode(" A");
		fontNode.appendChild(textNode);
		if(OP)
			OP.appendChild(fontNode);
		
		obj = gDOM.getElementById("font"+gOPcount+"_4");
		if(obj){
			obj.style.fontStyle = "normal";
			obj.style.fontSize = "10px";
			obj.style.fontFamily = "Times New Roman";
			obj = gDOM.getElementById("Io"+gOPcount);
			obj.style.color = "#000000";
		}		
		OP = gDOM.getElementById("OP_Sign"+gOPcount);
		if (OP) {		
			OP.setAttribute("background","images/button/grey_30_23_up_1.gif");
			OP.setAttribute("onMouseDown","swapMe(this, 'images/button/grey_30_23_up_1.gif', 'images/button/grey_30_23_down_1.gif')");
			fontNode = gDOM.createElement("font");
			fontNode.setAttribute("id",	"font"+gOPcount+"_sign");
		
			textNode = document.createTextNode("-ve");
			fontNode.appendChild(textNode);
		
			OP.appendChild(fontNode);
			OP.style.visibility = "visible";
		}		

		//stack	winding
		OP = gDOM.getElementById("OP_Stack"+gOPcount);
		if (OP) {	
			
			OP.setAttribute("background","images/button/grey_46_23_up.gif");
			OP.setAttribute("onMouseDown","swapMe(this, 'images/button/grey_46_23_up.gif', 'images/button/grey_46_23_down.gif')");
			fontNode = gDOM.createElement("font");
			fontNode.setAttribute("id",	"font"+gOPcount+"_stack");
			fontNode.setAttribute("style","font-size:10px;");
			textNode = document.createTextNode("Stack");
			fontNode.appendChild(textNode);
		
			OP.appendChild(fontNode);
			OP.style.visibility = "visible";
		}

		if(oDOM.images['OPPortImg'+gOPcount]!=null)	{	
			var imgsrc = getOPimg (gOPcount, Stack[gOPcount], Sign[gOPcount], topology);
			oDOM.images['OPPortImg'+gOPcount].setAttribute("src",imgsrc);
		}	

		oDOM.updateCircuit.count.value = gOPcount+1;
		oDOM.dummyForm.count.value = gOPcount+1;
	}
	else alert("Maximum number of Output is reached!");

	ShowWire(oDOM, topology);
	document.OPCount = gOPcount;
}

function ShowWire(doc,topology){
	var StackProperties = doc.updateCircuit.StackProperties.value;
	var count = doc.updateCircuit.count.value;
	if(doc.images['connectionWire']!=null)	{	
		doc.images['connectionWire'].setAttribute("src","ShowConnectionWire.jsp?checkStack=true"+StackProperties+"&gOPcount="+gOPcount+"&topology="+topology);
	}	
}
function CheckSign(i){
	if (i>0) {
		if(Stack[i]){
			if(Sign[i] == Sign[i-1]){
				alert("Cannot change sign of output as having stack.");
				return false;
			}
		}
	}
	return true;
}

function CheckStack (i) {
	Load();
	if (i>0) {
		if(Sign[i] != Sign[i-1]){
			alert("Cannot Stack as sign of output is not matched.");
			return false;
		}
		var Voi = gDOM.getElementById("Vo"+i);
		var Voi_1 = gDOM.getElementById("Vo"+(i-1));
		var Ioi = gDOM.getElementById("Io"+i);
		var Ioi_1 = gDOM.getElementById("Io"+(i-1));
		if (Voi && Voi_1 && validateNumber(Voi) && validateNumber(Voi_1)&& validateNumber(Ioi) && validateNumber(Ioi_1)) {
		if (Voi && Voi_1 && (Number(Voi.value)<=Number(Voi_1.value))) {
			alert("No stack winding is allowed, please adjust the Vo_ini[k] voltage higher than Vo_ini[k-1] voltage!");
			return false;
		}
		} else {
			return false;
		}
	}
	return true;
}

//Preview stack in Circuit
function PreviewStack (doc, NumOp, topologytype) {
	var StackProperties = "";
	for (var k=1; k<NumOp; k++)	{
		//stack	winding
		if(Stack[k]){
			StackProperties += "&Stack"+k+"=true";
		}
			if(doc.images['OPPortImg'+k]!=null)	{	
			var imgsrc = getOPimg (k, Stack[k], Sign[k], topologytype);
			doc.images['OPPortImg'+k].setAttribute("src",imgsrc);
		}
	}

	doc.updateCircuit.StackProperties.value = escape(StackProperties);

	if(doc.images['connectionWire']!=null)	{	
		doc.images['connectionWire'].setAttribute("src","ShowConnectionWire.jsp?checkStack=true"+StackProperties);
	}	
}

function ClickStack(i,topologytype){
	var	OP;
	var	fontNode;
	var	textNode;
	var str ;
	Load();
	if (top.frames["mainFrame"])
			oDOM = top.frames["mainFrame"].document;
	if(i <= gOPcount){
		if (!Stack[i] && !CheckStack (i)) return;

		Stack[i] = !Stack[i];

		//stack	winding
		if(Stack[i]){
			str = "Remove";
		} else {
			str = "Stack";
		}
		PreviewStack(oDOM, gOPcount+1, topologytype);

		OP = gDOM.getElementById("OP_Stack"+i);
		fontNode = gDOM.getElementById("font"+i+"_stack");
		if(OP)
			OP.removeChild(fontNode);
		fontNode = gDOM.createElement("font");
		fontNode.setAttribute("id",	"font"+i+"_stack");
		fontNode.setAttribute("style", "font-size:10px");
		textNode = document.createTextNode(str);
		fontNode.appendChild(textNode);

		if(OP)
			OP.appendChild(fontNode);
	}
}

function UpdateStackWinding(Wdg, status, signi, signi_1, topologytype){
	if(status == 'true'){
		AddStack(Wdg, topologytype);
	} else {
		if(signi != signi_1){
			alert("Cannot Stack as sign of output is not matched.");
			return;
		}
		RemoveStack(Wdg, topologytype);
	}
	if(top.frames["mainFrame"])
		top.frames["mainFrame"].Stack(Wdg,status);
	if(top.frames["ProductFrame"])
		top.frames["ProductFrame"].Reload();
}


function AddStack(Wdg, topologytype){
	var	OP;
	var	fontNode;
	OP=document.getElementById("Stack"+Wdg);
	if(OP != null){
		fontNode = document.getElementById("fontStack"+Wdg);
		if(fontNode)
			OP.removeChild(fontNode);
		if (OP!=null) {	
		fontNode = document.createElement("font");
		fontNode.setAttribute("size",-3);
		fontNode.setAttribute("id", "fontStack"+Wdg);
		textNode = document.createTextNode("Remove");
		fontNode.appendChild(textNode);
		OP.appendChild(fontNode);
	}
}
}

function RemoveStack(Wdg, topologytype){
	var	OP;
	var	fontNode;
	OP=document.getElementById("Stack"+Wdg);
 	if(OP != null){
		fontNode = document.getElementById("fontStack"+Wdg);
		if(fontNode)
			OP.removeChild(fontNode);

		OP.setAttribute("background","images/button/grey_46_23_up.gif");
		fontNode = document.createElement("font");
		fontNode.setAttribute("size",-3);
		fontNode.setAttribute("id", "fontStack"+Wdg);
		textNode = document.createTextNode("Stack");
		fontNode.appendChild(textNode);
		OP.appendChild(fontNode);
	}
}

function ClickSign(i, NumOp, topologytype){
	var	OP;
	var	fontNode;
	var	textNode;
	var str ;
	Load();	
	if (top.frames["mainFrame"])
			oDOM = top.frames["mainFrame"].document;
	if(i <= gOPcount){
		if (!CheckSign (i)) return;

		Sign[i] = (Sign[i]>0) ? -1 : 1;

		//stack	winding
		if(Sign[i]>0){
			str = "-ve";
		} else {
			str = "+ve";
		}			

		OP = gDOM.getElementById("OP_Sign"+i);
		fontNode = gDOM.getElementById("font"+i+"_sign");
		if(OP)
			OP.removeChild(fontNode);
		fontNode = gDOM.createElement("font");
		fontNode.setAttribute("id",	"font"+i+"_sign");

		textNode = document.createTextNode(str);
		fontNode.appendChild(textNode);

		if(OP)
			OP.appendChild(fontNode);
	}

	var SignProperties = "";
	if(oDOM.images['OPPortImg'+i]!=null)	{	
		var imgsrc = getOPimg (i, Stack[i], Sign[i], topologytype);
		oDOM.images['OPPortImg'+i].setAttribute("src",imgsrc);
	}
	for (var k=0; k<NumOp; k++)	{					
		SignProperties += "Sign"+k+Sign[k];						
	}
	oDOM.updateCircuit.SignProperties.value = escape(SignProperties);
}

function deleteOP(topologytype){
	var	obj;
	var	OP;
	var	fontNode;
	var	brNode;
	Load();
	if (top.frames["mainFrame"])
		oDOM = top.frames["mainFrame"].document;	

	if(!bShowVo){
		if (gOPcount > 0){
			OP = gDOM.getElementById("Loading1");	
			if(OP){
				OP.disabled = true;
			}
			OP = gDOM.getElementById("Load1");	
			if(OP){
				OP.style.visibility="hidden";
			}
		}
	}


	if (gOPcount > 0){
		OP = gDOM.getElementById("OP"+gOPcount+"1");
		fontNode = gDOM.getElementById("font"+gOPcount+"_1");
		if(OP && fontNode)
			OP.removeChild(fontNode);
		
		OP = gDOM.getElementById("OP"+gOPcount+"2");
		fontNode = gDOM.getElementById("font"+gOPcount+"_2");
		if(OP && fontNode)
			OP.removeChild(fontNode);
		
		OP = gDOM.getElementById("OP"+gOPcount+"3");
		fontNode = gDOM.getElementById("font"+gOPcount+"_3");
		if(OP && fontNode)
			OP.removeChild(fontNode);
		
		OP = gDOM.getElementById("OP"+gOPcount+"4");
		fontNode = gDOM.getElementById("font"+gOPcount+"_4");
		if(OP && fontNode)
			OP.removeChild(fontNode);
		
		//sign
		OP = gDOM.getElementById("OP_Sign"+gOPcount);
		if(OP != null){
			fontNode = gDOM.getElementById("font"+gOPcount+"_sign");
			OP.removeChild(fontNode);
			
			OP.removeAttribute("background");
			OP.removeAttribute("onMouseDown");
			OP.removeAttribute("style");
			OP.style.visibility="hidden";
		}

		//stack	winding
		OP = gDOM.getElementById("OP_Stack"+gOPcount);
		if(OP != null){
			fontNode = gDOM.getElementById("font"+gOPcount+"_stack");
			OP.removeChild(fontNode);
			
			OP.removeAttribute("background");
			OP.removeAttribute("onMouseDown");
			OP.removeAttribute("style");
			OP.style.visibility="hidden";
		}

		obj=oDOM.getElementById("Layer"+(gOPcount+2));

		OP=document.getElementById("Stack"+gOPcount);
		fontNode = gDOM.getElementById("fontStack"+gOPcount);
		if(fontNode && OP)
			OP.removeChild(fontNode);

		if(oDOM.images['OPPortImg'+gOPcount]!=null) {			
			oDOM.images['OPPortImg'+gOPcount].setAttribute("src","images/circuit/dummy_"+circuitImageVer+".gif");
		}	

		Stack[gOPcount] = false;		
		gOPcount--;

		PreviewStack (oDOM, gOPcount+1,topologytype);
		oDOM.updateCircuit.count.value = gOPcount+1;
		oDOM.dummyForm.count.value = gOPcount+1;
	}
	else alert("Minimum number of Output is reached!");
}

function DetailSpecSubmitCheck(iCount){
	var	form = document.form;
	
	var	dVmax=form.Vmax.value;
	var	dVmin=form.Vmin.value;
	var	dInrushI=form.InrushImax.value;
	var	dACFreq="0";
	if (form.Freq){
		dACFreq	= form.Freq.value;
	}
	
	var	dHoldUpTime=form.HoldUpTime.value;
	var	dHoldUpTimeVoltage=form.VHoldUpTime.value;
	
	var	dVo=new	Array(iCount);
	var	dIo=new	Array(iCount);
	var	dPosOPTolerance=new	Array(iCount);
	var	dNegOPTolerance=new	Array(iCount);
	var	dMaxIo=new Array(iCount);
	var	dMinIo=new Array(iCount);
	var	dIoLimit=new Array(iCount);
	var	dVoPP=new Array(iCount);
	var	dVLoad=new Array(iCount);
	var	dUpperLoad=new Array(iCount);
	var	dLowerLoad=new Array(iCount);
	var	dLoadRate=new Array(iCount);
	
	var	dHeight=form.ConverterHeight.value;
	var	dWidth=form.ConverterWidth.value;
	var	dThickness=form.ConverterThickness.value;
	
	for	(var i=0; i<iCount;	i++){
		var	obj	= document.getElementById("Vo"+i);
		if(obj == null) continue;
		dVo[i] = obj.value;
		obj	= document.getElementById("Io"+i+"max");
		dIo[i] = obj.value;
		obj	= document.getElementById("PosT"+i);
		dPosOPTolerance[i] = obj.value;
		obj	= document.getElementById("NegT"+i);
		dNegOPTolerance[i] = obj.value;
		obj	= document.getElementById("Io"+i+"min");
		dMinIo[i] =	obj.value;
		obj	= document.getElementById("Io"+i+"limit");
		dIoLimit[i]	= obj.value;
		obj	= document.getElementById("PPVout"+i);
		dVoPP[i] = obj.value;
		obj	= document.getElementById("LoadV"+i);
		dVLoad[i] =	obj.value;
		obj	= document.getElementById("LoadUpper"+i);
		dUpperLoad[i] =	obj.value;
		obj	= document.getElementById("LoadLower"+i);
		dLowerLoad[i] =	obj.value;
		obj	= document.getElementById("SlewRate"+i);
		dLoadRate[i] = obj.value;
		
		if (dVo[i] == "" ||	dIo[i] == "" ||	dPosOPTolerance[i] == "" ||	dNegOPTolerance[i] == "" ||
				dMinIo[i] == ""	|| dIoLimit[i] == "" ||	dVoPP[i] ==	"" || dVLoad[i]	== "" ||
					dUpperLoad[i] == ""	|| dLowerLoad[i] ==	"" || dLoadRate	== ""){
			alert("Please fill in all box.");
			return false;
		}
		
		if (isNaN(Number(dVo[i])) && !matchPositivePattern(dVo[i])){
			alert("Invalid Input - Output Voltage");
			return false;
		}
		else if	((parseFloat(dVo[i])>99999)){
				alert("Output Voltage is too large.");
				return false;
		}
		
		if (isNaN(Number(dIo[i])) && !matchPositivePattern(dIo[i])){
			alert("Invalid Input - Maximum Output Current");
			return false;
		}
		else if	((parseFloat(dIo[i])>9999)){
				alert("Maximum Output Current is too large.");
				return false;
		}
		
		if (isNaN(Number(dMinIo[i])) && !matchPositivePattern(dMinIo[i])){
			alert("Invalid Input - Minimum Output Current");
			return false;
		}
		else if	((parseFloat(dMinIo[i])>9999)){
				alert("Minimum Output Current is too large.");
				return false;
		}
		
		if (isNaN(Number(dPosOPTolerance[i])) && !matchPositivePattern(dPosOPTolerance[i])){
			alert("Invalid Input - Positive	O/P	Tolerance");
			return false;
		}
		else if	((parseFloat(dPosOPTolerance[i])>9999)){
				alert("Positive	O/P	Tolerance is too large.");
				return false;
		}
		
		if (isNaN(Number(dNegOPTolerance[i])) && !matchPositivePattern(dNegOPTolerance[i])){
			alert("Invalid Input - Negative	O/P	Tolerance");
			return false;
		}
		else if	((parseFloat(dNegOPTolerance[i])>9999)){
				alert("Negative	O/P	Tolerance is too large.");
				return false;
		}
		
		if (isNaN(Number(dIoLimit[i])) && !matchPositivePattern(dIoLimit[i])){
			alert("Invalid Input - Output Current Limit");
			return false;
		}
		else if	((parseFloat(dIoLimit[i])>9999)){
				alert("Output Current Limit is too large.");
				return false;
		}
		
		if (isNaN(Number(dVoPP[i])) && !matchPositivePattern(dVoPP[i])){
			alert("Invalid Input - Peak	to Peak	Output Ripple Volt.");
			return false;
		}
		else if	((parseFloat(dVoPP[i])>9999)){
				alert("Peak	to Peak	Output Ripple Volt. is too large.");
				return false;
		}
		
		if (isNaN(Number(dVLoad[i])) && !matchPositivePattern(dVLoad[i])){
			alert("Invalid Input - Transient Load Overshoot	Volt.");
			return false;
		}
		else if	((parseFloat(dVLoad[i])>9999)){
				alert("Transient Load Overshoot	Volt. is too large.");
				return false;
		}
		
		if (isNaN(Number(dUpperLoad[i])) && !matchPositivePattern(dUpperLoad[i])){
			alert("Invalid Input - Upper Transient Load	setting");
			return false;
		}
		else if	((parseFloat(dUpperLoad[i])>9999)){
				alert("Upper Transient Load	setting is too large.");
				return false;
		}
		
		if (isNaN(Number(dLowerLoad[i])) && !matchPositivePattern(dLowerLoad[i])){
			alert("Invalid Input - Lower Transient Load	setting");
			return false;
		}
		else if	((parseFloat(dLowerLoad[i])>9999)){
				alert("Lower Transient Load	setting is too large.");
				return false;
		}
		
		if (isNaN(Number(dLoadRate[i])) && !matchPositivePattern(dLoadRate[i])){
			alert("Invalid Input - Transient Load Slew Rate");
			return false;
		}
		else if	((parseFloat(dLoadRate[i])>9999)){
				alert("Transient Load Slew Rate is too large.");
				return false;
		}
	}

	if (dVmax == ""	|| dVmin ==	"" || dInrushI == "" ||	dACFreq	== "" || 
			dHoldUpTime	== "" || dHoldUpTimeVoltage	== "" || dHeight ==	"" ||
				dWidth == "" ||	dThickness == ""){
		alert("Please fill in all box.")
		return false;
	}
	if (isNaN(Number(dVmax)) && !matchPositivePattern(dVmax)){
		alert("Invalid Input - Maximum AC input	voltage");
		return false;
	}
	else if	((parseFloat(dVmax)>9999)){
			alert("Maximum AC input	voltage is too large.");
			return false;
	}
	
	if (isNaN(Number(dVmin)) && !matchPositivePattern(dVmin)){
		alert("Invalid Input - Minimum AC input	voltage");
		return false;
	}
	else if	((parseFloat(dVmin)>9999)){
			alert("Minimum AC input	voltage is too large.");
			return false;
	}
	
	if (parseFloat(dVmax)<parseFloat(dVmin)){
		alert("Maximum AC input voltage should be larger than Minimum AC input voltage.");
		return false;
	}
	
	if (isNaN(Number(dInrushI)) && !matchPositivePattern(dInrushI)){
		alert("Invalid Input - Maximum inrush current");
		return false;
	}
	else if	((parseFloat(dInrushI)>9999)){
			alert("Maximum inrush current is too large.");
			return false;
	}
	
	if (isNaN(Number(dACFreq)) && !matchPositivePattern(dACFreq)){
		alert("Invalid Input - AC input	frequency");
		return false;
	}
	else if	((parseFloat(dACFreq)>9999)){
			alert("AC input frequency is too large.");
			return false;
	}
	
	if (isNaN(Number(dHoldUpTime)) && !matchPositivePattern(dHoldUpTime)){
		alert("Invalid Input - Hold	Up Time");
		return false;
	}
	else if	((parseFloat(dHoldUpTime)>9999)){
			alert("Hold Up Time is too large.");
			return false;
	}
	
	if (isNaN(Number(dHoldUpTimeVoltage)) && !matchPositivePattern(dHoldUpTimeVoltage)){
		alert("Invalid Input - Hold	Up Time	Voltage");
		return false;
	}
	else if	((parseFloat(dHoldUpTimeVoltage)>9999)){
			alert("Hold Up Time	Voltage is too large.");
			return false;
	}
	
	if (isNaN(Number(dHeight)) && !matchPositivePattern(dHeight)){
		alert("Invalid Input - Converter Height");
		return false;
	}
	else if	((parseFloat(dHeight)>9999)){
			alert("Converter Height is too large.");
			return false;
	}
	
	if (isNaN(Number(dWidth)) && !matchPositivePattern(dWidth)){
		alert("Invalid Input - Converter Width");
		return false;
	}
	else if	((parseFloat(dWidth)>9999)){
			alert("Converter Width is too large.");
			return false;
	}
	
	if (isNaN(Number(dThickness)) && !matchPositivePattern(dThickness)){
		alert("Invalid Input - Converter Thickness");
		return false;
	}
	else if	((parseFloat(dThickness)>9999)){
			alert("Converter Thickness is too large.");
			return false;
	}
	return true;
}

function Check(){
	var	form = document.topForm;
	var	ACinput;
	var	DCinput;
	if( form.ACDCinput){
		ACinput = form.ACDCinput[0].checked;
		DCinput	= form.ACDCinput[1].checked;
	}
	if(form.Vmax)
	Vmax = form.Vmax.value;
	if(form.Vmin)
	Vmin = form.Vmin.value;

	if (ACinput)
		ACDCinput =	"AC";
	else ACDCinput = "DC";

	bShowVo = form.bShowVo.value;
	if(bShowVo == "false"){
		Vo0 = 12;
		Io0 = 4;
		if( form.Loading0)
			Loading0 = form.Loading0.options[form.Loading0.selectedIndex].value;
		if( form.Loading1)
			Loading1 = form.Loading1.options[form.Loading1.selectedIndex].value;
		return true;
	}

	Vo0	= document.getElementById("Vo0").value;
	Io0	= document.getElementById("Io0").value;
	Vo1	= document.getElementById("Vo1");
	Io1	= document.getElementById("Io1");
	Vo2	= document.getElementById("Vo2");
	Io2	= document.getElementById("Io2");
	Vo3	= document.getElementById("Vo3");
	Io3	= document.getElementById("Io3");
	Vo4	= document.getElementById("Vo4");
	Io4	= document.getElementById("Io4");
	
	if (Vmax ==	"" || Vmin == "" ||	Vo0	== "" || Io0 ==	""){
		alert("Please fill in all box");
		return false;
	}
	else if	(isNaN(Number(Vmax)) ||	isNaN(Number(Vmin))	|| isNaN(Number(Vo0)) || isNaN(Number(Io0))	){
			alert("Invalid Input.");
			return false;
	}
	else if	(parseFloat(Vmax) <	parseFloat(Vmin)){
			alert("Vin min cannot larger than Vin max.");
			return false;
	}
	else if	((parseFloat(Vmax)<=0)||(parseFloat(Vmin)<=0)){
			alert("Vin min and Vin max should be positive.");
			return false;
	}
	else if	((parseFloat(Vmax)>9999) || (parseFloat(Vmin)>9999)){
			alert("Vin max or Vin min is too large.");
			return false;
	}
	else if ((parseFloat(Vo0)<=0)||(parseFloat(Io0)<0)){
		alert("Vout and Iout should be positive.");
		return false;
	}
	else if	((parseFloat(Io0)>9999)){
			alert("Iout is too large.");
			return false;
	}
	else if	((parseFloat(Vo0)>99999)){
			alert("Vout is too large.");
			return false;
	}
	else if	(!ACinput && !DCinput){
			alert("Please select AC or DC input.");
			return false;
	}
		
	if (Vo1	== null){
	}
	else {
		Vo1	= Vo1.value;
		Io1	= Io1.value;
	
		if (Vo1	== "" || Io1 ==	""){
			alert("Please fill in all box");
			return false;
		}
		else if	(isNaN(Number(Vo1))	|| isNaN(Number(Io1)) ){
				alert("Invalid Input.");
				return false;
		} else if ((parseFloat(Vo1)<=0)||(parseFloat(Io1)<0)){
			alert("Vout and Iout should be positive.");
			return false;
		}
		else if	((parseFloat(Io1)>9999)){
				alert("Iout is too large.");
				return false;
		}
		else if	((parseFloat(Vo1)>99999)){
				alert("Vout is too large.");
				return false;
		}

		if (Vo2	== null){
			//return true;
		}
		else {
			Vo2	= Vo2.value;
			Io2	= Io2.value;
			
			if (Vo2	== "" || Io2 ==	""){
				alert("Please fill in all box");
				return false;
			}
			else if	(isNaN(Number(Vo2))	|| isNaN(Number(Io2)) ){
					alert("Invalid Input.");
					return false;
			} else if ((parseFloat(Vo2)<=0)||(parseFloat(Io2)<0)){
				alert("Vout	and	Iout should	be positive.");
				return false;
			}
			else if	((parseFloat(Io2)>9999)){
					alert("Iout is too large.");
					return false;
			}
			else if	((parseFloat(Vo2)>99999)){
					alert("Vout is too large.");
					return false;
			}
		
			if (Vo3	== null){
				//return true;
			}
			else {
				Vo3	= Vo3.value;
				Io3	= Io3.value;
				
				if (Vo3	== "" || Io3 ==	""){
					alert("Please fill in all box");
					return false;
				}
				else if	(isNaN(Number(Vo3))	|| isNaN(Number(Io3)) ){
						alert("Invalid Input.");
						return false;
				} else if ((parseFloat(Vo3)<=0)||(parseFloat(Io3)<0)){
					alert("Vout	and	Iout should	be positive.");
					return false;
				}
				else if	((parseFloat(Io3)>9999)){
						alert("Iout is too large.");
						return false;
				}
				else if	((parseFloat(Vo3)>99999)){
						alert("Vout is too large.");
						return false;
				}
			
				if (Vo4	== null){
					//return true;
				}
				else {
					Vo4	= Vo4.value;
					Io4	= Io4.value;
					
					if (Vo4	== "" || Io4 ==	""){
						alert("Please fill in all box");
						return false;
					}
					else if	(isNaN(Number(Vo4))	|| isNaN(Number(Io4)) ){
							alert("Invalid Input.");
							return false;
					} else if ((parseFloat(Vo4)<=0)||(parseFloat(Io4)<0)){
						alert("Vout	and	Iout should	be positive.");
						return false;
					}
					else if	((parseFloat(Io4)>9999)){
							alert("Iout is too large.");
							return false;
					}
					else if	((parseFloat(Vo4)>99999)){
							alert("Vout is too large.");
							return false;
					}
				}//end-if check	Vo4
			}//end-if check	Vo3
		}//end-if check	Vo2	
	}//end-if check	Vo1
	
	
	return true;
}
function CheckVinMaxMin(Vmax,Vmin){
try{
	if (Vmax ==	"" || Vmin == ""){
		alert("Please fill in all box");
		return false;
	}
	else if	(isNaN(Number(Vmax)) ||	isNaN(Number(Vmin))){
			alert("Invalid Input.");
			return false;
	}
	else if	(parseFloat(Vmax) <	parseFloat(Vmin)){
			alert("Vin min cannot larger than Vin max.");
			return false;
	}
	else if	((parseFloat(Vmax)<=0)||(parseFloat(Vmin)<=0)){
			alert("Vin min and Vin max should be positive.");
			return false;
	}
	else if	((parseFloat(Vmax)>9999) || (parseFloat(Vmin)>9999)){
			alert("Vin max or Vin min is too large.");
			return false;
	}
	return true;
	}catch(exception){
	return false;
	}
}
function CheckVoIo(VoName,IoName,NumOP){
try{
	for(var i=0;i<NumOP;i++){
		var VoField = document.getElementById(VoName+i);
		var IoField = document.getElementById(IoName+i);
		if(VoField && IoField){
			Vo = VoField.value;
			Io = IoField.value;
			if (Vo	== "" || Io ==	""){
				alert("Please fill in all box");
				return false;
			}
			else if	(isNaN(Number(Vo)) || isNaN(Number(Io))){
					alert("Invalid Input.");
					return false;
			}
			else if ((parseFloat(Vo)<=0)||(parseFloat(Io)<0)){
				alert("Vout"+(i+1)+" and Iout"+(i+1)+" should be positive.");
				return false;
			}
			else if	((parseFloat(Io)>9999)){
					alert("Iout"+(i+1)+" is too large.");
					return false;
			}
			else if	((parseFloat(Vo)>99999)){
					alert("Vout"+(i+1)+" is too large.");
					return false;
			}
		}
	}
	}catch(exception){
	alert(exception);
	return false;
	}
	return true;
}

function GenerateDesign(Reinit, lang, wOriginalSetting,topologytype,contextPath,deduct){
	if (Check()){
		//openpopup('disclaimer.jsp', 'disclaimer_win',	'500', '500');
		if (setAllowGenerateDesign)	{
			setAllowGenerateDesign(false);
		}
		viewprogress(parent.bottomFrame.document, true);
		var res = '&lang='+lang+'&count='+(gOPcount+1)+'&ACDCinput='+ACDCinput
			+'&Vmax='+Vmax+'&Vmin='+Vmin
			+'&Vo0='+Vo0+'&Io0='+Io0+'&Vo1='+Vo1+'&Io1='+Io1
			+'&Vo2='+Vo2+'&Io2='+Io2+'&Vo3='+Vo3+'&Io3='+Io3
			+'&Vo4='+Vo4+'&Io4='+Io4+'&deduct='+deduct
			+'&HvStack1='+Stack[1]+'&HvStack2='+Stack[2]+'&HvStack3='+Stack[3]+'&HvStack4='+Stack[4]
			+'&HvSign0='+Sign[0]+'&HvSign1='+Sign[1]+'&HvSign2='+Sign[2]+'&HvSign3='+Sign[3]+'&HvSign4='+Sign[4] + '&Reinit=' + Reinit

		if(bShowVo){
			res += '&bShowVo='+bShowVo;
			res += '&Loading0='+Loading0;
			res += '&Loading1='+Loading1;
		}

		top.frames["mainFrame"].location = contextPath+'/main.jsp?topologytype='+topologytype+res;			
		
		DisableInitialSetting(wOriginalSetting,gOPcount+1);

		generate = true;
		return true;
	}
	return false;
}

function DisableInitialSetting(wOriginalSetting,MaxNumOP) {	
	
	var	obj=document.getElementById("label");
	if (obj!=null)
		obj.value=wOriginalSetting;

	for	(var i=0; i	<MaxNumOP; i++){
		obj=document.getElementById("Vo"+i);
		if (obj	!= null){				
			obj.readOnly = true;
			obj.style.color="#FFFFFF";
			defaultBgColor=obj.style.backgroundColor;
			obj.style.backgroundColor="#808080";
		}

		obj=document.getElementById("Io"+i);
		if (obj	!= null){				
			obj.readOnly = true;
			obj.style.color="#FFFFFF";
			obj.style.backgroundColor="#808080";
		}
	}
	
	obj=document.getElementById("Vmax");
	if (obj	!= null){			
		obj.readOnly = true;
		obj.style.color="#FFFFFF";
		obj.style.backgroundColor="#808080";
	}
	obj=document.getElementById("Vmin");
	if (obj	!= null){			
		obj.readOnly = true;
		obj.style.color="#FFFFFF";
		obj.style.backgroundColor="#808080";
	}
	for	(var i=0; i	<2; i++){
		obj=document.getElementById("Loading"+i);
		if (obj	!= null){			
			obj.readOnly = true;
		}
	}
}

function AfterGenerateDesign(wOriginalSetting,MaxNumOP){
	obj=document.getElementById("label");
	if (obj!=null)
	obj.value=wOriginalSetting;
	
	for	(var i=0; i	<MaxNumOP; i++){
		obj=document.getElementById("Vo"+i);
		if (obj	!= null){			
			obj.readOnly = true;
			obj.style.color="#FFFFFF";
			defaultBgColor=obj.style.backgroundColor;
			obj.style.backgroundColor="#808080";
		}

		obj=document.getElementById("Io"+i);
		if (obj	!= null){			
			obj.readOnly = true;
			obj.style.color="#FFFFFF";
			obj.style.backgroundColor="#808080";
		}
	}
	
	obj=document.getElementById("Vmax");
	if (obj	!= null){		
		obj.readOnly = true;
		obj.style.color="#FFFFFF";
		obj.style.backgroundColor="#808080";
	}
	obj=document.getElementById("Vmin");
	if (obj	!= null){	
		obj.readOnly = true;
		obj.style.color="#FFFFFF";
		obj.style.backgroundColor="#808080";
	}
	
	obj=document.getElementById("ACinput");
	if (obj	!= null){
		if (!obj.checked)
		obj.disabled = true;
	}
	obj=document.getElementById("DCinput");
	if (obj	!= null){
		if (!obj.checked)
		obj.disabled = true;
	}

	for	(var i=0; i	<2; i++){
		obj=document.getElementById("Loading"+i);
		if (obj	!= null){			
			obj.disabled = true;
		}
	}
}

function NewDesign(lang,tt){
	top.window.location	= "index2.jsp?topologytype="+tt;
	return;
}

function CalculateExistingDesign(lang,operation){
	var	date = new Date();
	if (top.frames["bottomFrame"]!=null) {
		top.frames["bottomFrame"].location = 'bottom2.jsp?date='+date.getTime()+'&lang='+lang+'&calculate=true&deduct='+operation;
	}
}

function Optimization(lang){
	var	date = new Date();
	optimize = true;
	OptimizeIndex =	1;
	if (top.frames["bottomFrame"]!=null) {
		top.frames["bottomFrame"].location = 'bottom2.jsp?date='+date.getTime()+'&lang='+lang+'&optimize=true';
	}
}

function Prev(lang){
	if (!optimize){
		alert("Please click	optimization first!")
		return;
	}
	if (OptimizeIndex==1){
		alert("No Previous Record!");
		return;
	}
	else OptimizeIndex--;

	var	date = new Date();
	if (top.frames["bottomFrame"]!=null) {
		top.frames["bottomFrame"].location = 'prev.jsp?date='+date.getTime()+'&lang='+lang+'&index='+OptimizeIndex;
	}
}

function Next(lang){
	if (!optimize){
		alert("Please click	optimization first!")
		return;
	}
	if (OptimizeIndex==100){
		alert("No Next Record!");
		return;
	}
	else OptimizeIndex++;
		
	var	date = new Date();
	if (top.frames["bottomFrame"]!=null) {
		top.frames["bottomFrame"].location = 'next.jsp?date='+date.getTime()+'&lang='+lang+'&index='+OptimizeIndex;
	}
}
function openDetailSpec(lang,PS_Number,isCheck){
	if (!isCheck || Check()){
		detailSpecWin =	window.open('detail_spec.jsp?PS_Number='+PS_Number
			+'&templang='+lang+'&tempcount='+(gOPcount+1)+'&tempACDCinput='+ACDCinput
			+'&tempVmax='+Vmax+'&tempVmin='+Vmin+'&tempVo0='+Vo0+'&tempIo0='+Io0
			+'&tempVo1='+Vo1+'&tempIo1='+Io1+'&tempVo2='+Vo2+'&tempIo2='+Io2
			+'&tempVo3='+Vo3+'&tempIo3='+Io3+'&tempVo4='+Vo4+'&tempIo4='+Io4
			+'&tempSign0='+Sign[0]+'&tempSign1='+Sign[1]+'&tempSign2='+Sign[2]
			+'&tempSign3='+Sign[3]+'&tempSign4='+Sign[4],
			'detailSpecWin','width=500,height=650,scrollbars=yes,resizable=yes');
		detailSpecWin.blur(); detailSpecWin.focus();
	}
}

function disableRightClick(e)
{
  var message =	"Right click disabled";
  
  if(!document.rightClickDisabled) // initialize
  {
	if(document.layers)	
	{
	  document.captureEvents(Event.MOUSEDOWN);
	  document.onmousedown = disableRightClick;
	}
	else document.oncontextmenu	= disableRightClick;
	return document.rightClickDisabled = true;
  }
  if(document.layers ||	(document.getElementById &&	!document.all))
  {
	if (e.which==2||e.which==3)
	{
	  alert(message);
	  return false;
	}
  }
  else
  {
	alert(message);
	return false;
  }
}


function updateOptimizedResult (winpops, dir, PS_Number) {
	if (winpops!=null) {		
		if(winpops.document){
			if (winpops.document.optimizeForm!=null) {
				winpops.document.optimizeForm.PS_Number.value = PS_Number;
				winpops.document.optimizeForm.dir.value	= dir;
				winpops.document.optimizeForm.submit();
				if (document.optimizeTempForm!=null)
					document.optimizeTempForm.submit();
				var obj = document.getElementById("optimizeTempForm" + PS_Number);
				if(obj != null){
					obj.submit();
				}
			} else if (!WindowIsClosed(winpops.opener)) {
					updateOptimizedResult (winpops.opener,dir, PS_Number);
			}	
		}
	}
}

function JumpOptimizedResult(OptimizeIndex,optimize,winpops, PS_Number){
	if ( !optimize ) {
		alert("Please click	optimization first!");
		return;
	}
	// the following is	copied from	updateOptimizedResult()
	if ( winpops !=	null ) {
		if ( winpops.document.optimizeForm != null ) {
			winpops.document.optimizeForm.PS_Number.value = PS_Number;
			winpops.document.optimizeForm.dir.value	= "jump";
			winpops.document.optimizeForm.jumpidx.value	= OptimizeIndex;
			winpops.document.optimizeForm.submit();
			if ( document.optimizerTempForm	!= null	)
				document.optimizeTempForm.submit();
			var obj = document.getElementById("optimizeTempForm" + PS_Number);
			if(obj != null){
				obj.submit();
			}
		} else if (!WindowIsClosed(winpops.opener)) {
				JumpOptimizedResult(OptimizeIndex,optimize,winpops.opener, PS_Number);
		};
	};
}

function PrevOptimizedResult(OptimizeIndex,optimize,winpops,PS_Number ){
	if (!optimize){
		alert("Please click	optimization first!")
		return;
	}
	if (OptimizeIndex==-999) {
		updateOptimizedResult(winpops,"reset", PS_Number);
		return;
	}
	if (OptimizeIndex==0){
		alert("No Previous Record!");
		return;
	}
	updateOptimizedResult (winpops,	"prev", PS_Number);
}

function NextOptimizedResult(OptimizeIndex,optimize,winpops,maxIndex, PS_Number){
	if (!optimize){
		alert("Please click	optimization first!")
		return;
	}
	if (OptimizeIndex==-999) {
		updateOptimizedResult(winpops,"reset", PS_Number);
		return;
	}
	if (OptimizeIndex==maxIndex){
		alert("No Next Record!");
		return;
	}		
	updateOptimizedResult (winpops,	"next", PS_Number);
}

function action(){
}
