		
	/*	
	*	Visual Math™ project
	*	
	*	event_handler java script
	*/
	
	
	var previous = null
	var prev_key = ""
	var current_mode
	var IsMark = false
	
	function on_button_down(from_ob){
		if ( from_ob == null)
			return;
			
		from_ob.src = ("./Images/" + from_ob.id + "Down.gif")	
	}
	
	function on_button_up(from_ob){
		if ( from_ob == null)
			return;
			
		from_ob.src = ("./Images/" + from_ob.id + "Over.gif")	
	}
	
	function do_Translate(from_ob){
		
		if ( previous == null )
			return;	
							
		var direct = 0;
		switch ( from_ob.id){
			case "form_top": direct = 2 
			break
			case "form_bottom": direct = 3 
			break
			case "form_left": direct = 0
			break
			case "form_right": direct = 1
			break									
		}
		
		VMGraph.doTranslate (direct, previous.id)
		VTable.ReplaceFormula (VMGraph.GetFormula(previous.id),previous.id,"",true)
	}
	
	function do_Stretch(from_ob){
		
		if ( previous == null )
			return;
					
		var direct = 0;
		switch ( from_ob.id){
			case "form_top": direct = 2 
			break
			case "form_bottom": direct = 3 
			break
			case "form_left": direct = 1
			break
			case "form_right": direct = 0
			break									
		}
		
		VMGraph.doStretch (direct, previous.id)
	}
			
	function on_button_click(mode, from_ob){
		
		if ( from_ob == null)
			return;
		
		if ( previous == null )
			return;
							
		if ( mode == 1 )
			do_Translate(from_ob)
		else if ( mode == 2 )
			do_Stretch(from_ob)
		else
			return;	
		//alert(previous.id)	
		form_formula.SetText(VMGraph.GetFormula (previous.id))						
	}
	
	function on_reset (){
		VMGraph.ResetTransformation (null)	
		form_formula.SetText(VMGraph.GetFormula (previous.id))		
	}
	
	function on_scale (elm){
	
		try{	
			var p = elm.parentElement.parentElement.parentElement
			var el = p.getElementsByTagName("INPUT")
			var res = 0				
			var name = elm.parentElement.parentElement.parentElement.parentElement.parentElement.id
			switch (name){
				case 'zoom0': res = VMGraph.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value));
                                                                break;            
				case 'zoom1': res = VMGraph1.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value)); break;
								
				case 'zoom2': res = VMGraph2.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value)); break;
				case 'zoom': res = VMGraph3.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value)); break;
                                case 'zoom13': res = VMGraph1.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value)); 
								if ( res == 0 )
                                               
                                               res = VMGraph3.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value));
                                                                break;
                                case 'zoom12': res = VMGraph1.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value)); 
								if ( res == 0 )
                                               
                                               res = VMGraph2.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value));
                                                                break;

                                case 'zoom123': res = VMGraph1.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value)); 
								if ( res == 0 )
                                                res = VMGraph2.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value));
								if ( res == 0 )
                                               res = VMGraph3.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value));
                                                                break;
                                case 'zoom1234':  res = VMGraph1.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value));
								if ( res == 0 )
                                               res = VMGraph2.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value)); 
								if ( res == 0 )
                                               res = VMGraph3.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value));
								if ( res == 0 )
                                               res = VMGraph4.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value));
                                                                break;



			}	
			if ( res != 0 )
				alert("÷ðä îéãä ìà çå÷é")
				
		}catch(e){
			alert(e.getMessage())
		}
if(res==0){VTable.SetScale (  new Number(el[1].value),
			     new Number(el[2].value),
			     new Number(el[3].value),
			     new Number(el[0].value));}
                       
                                         
	}


        function on_scale_no_table (elm){
	
		try{	
			var p = elm.parentElement.parentElement.parentElement
			var el = p.getElementsByTagName("INPUT")
			var res = 0				
			var name = elm.parentElement.parentElement.parentElement.parentElement.parentElement.id
			switch (name){
				case 'zoom0': res = VMGraph.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value));
                                                                break;            
				case 'zoom1': res = VMGraph1.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value)); break;
								
				case 'zoom2': res = VMGraph2.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value)); break;
				case 'zoom': res = VMGraph3.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value)); break;
                                
                                case 'zoom13': res = VMGraph1.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value)); 
								if ( res == 0 )
                                               
                                               res = VMGraph3.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value));
                                                                break;
                                case 'zoom123': res = VMGraph1.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value)); 
								if ( res == 0 )
                                                res = VMGraph2.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value));
								if ( res == 0 )
                                               res = VMGraph3.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value));
                                                                break;
                                case 'zoom1234':  res = VMGraph1.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value));
								if ( res == 0 )
                                               res = VMGraph2.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value)); 
								if ( res == 0 )
                                               res = VMGraph3.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value));
								if ( res == 0 )
                                               res = VMGraph4.SetScale (  new Number(el[1].value),
								new Number(el[2].value),
								new Number(el[3].value),
								new Number(el[0].value));
                                                                break;



			}	
			if ( res != 0 )
				alert("Illegal scale!")
				
		}catch(e){
			alert(e.getMessage())
		}
          
                       

                                             
	}
		
		
	function form_step_onchange(mode) {
		
		if ( mode == 3 ){			
			VTable.SetStep (new Number (form_step.value))
		}	
		
		if ( previous == null )
			return;
			
		if ( mode == 1 ){	
			VMGraph.ChangeTranslateStep(form_step.value,previous.id);
		}else if  ( mode == 2){			
			VMGraph.ChangeStretchStep(form_step.value,previous.id);	
		}
	}
				
	function on_button_out(from_ob){
		if ( from_ob == null)
			return;
			
		from_ob.src = ("./Images/" + from_ob.id + ".gif")	
	}
	
	function on_button_over(from_ob){
		if ( from_ob == null)
			return;
	
		from_ob.src = ("./Images/" + from_ob.id + "Over.gif")	
	}
	
	function do_select( from_ob ){
		if ( previous != null )
			previous.style.backgroundColor='#ffffff'
		
					
		from_ob.parentElement.style.backgroundColor='#eeeeee'
		previous = from_ob.parentElement
		
		if ( current_mode < 4 ){			
			if	( current_mode == 1 )	
				form_step.value = VMGraph.GetTranslateStepOf(from_ob.parentElement.id)
			else if ( current_mode == 2 ) 
				form_step.value = VMGraph.GetStretchStepOf(from_ob.parentElement.id)			
		}
		else if ( current_mode == 4 ){
		
			VMGraph.EnableViewFunction(prev_key, false)
			VMGraph.AddFormula( from_ob.parentElement.name,
							from_ob.parentElement.id,
							from_ob.parentElement.style.color,
							true)
			VMGraph.EnableTrase (from_ob.parentElement.name, true)							
			prev_key = from_ob.parentElement.id						
		}
		else if ( current_mode == 5 ){
			form_step.value = VMGraph.GetTranslateStepOf(from_ob.parentElement.id)			
		}

	}
	
	function do_compselect( from_ob ){
		if ( previous != null )
			previous.style.backgroundColor='#ffffff'
		
					
		from_ob.parentElement.style.backgroundColor='#eeeeee'
		previous = from_ob.parentElement
		
		VMGraph.EnableViewFunction(prev_key, false)
		VMGraph.AddFormula( from_ob.parentElement.name,
						from_ob.parentElement.id,
						from_ob.parentElement.style.color,
						true)							
		prev_key = from_ob.parentElement.id	
					
	
	}
		
	function do_check_toggle_applet(from_ob){		
		
		var vis
		
		if ( from_ob.parentElement.id == "" )
			return;

		if (from_ob.outerText == "+"){
			from_ob.innerText = "-"
			vis = false
		}	
		else{
			from_ob.innerText = "+"
			vis = true
			
		}
		
		VMGraph.AddFormula( from_ob.parentElement.name,
							from_ob.parentElement.id,
							from_ob.parentElement.style.color,
							vis)	
		VMGraph.EnableTrace (from_ob.parentElement.id, trace.status)	
		
		
				
		VTable.AddFormula(from_ob.parentElement.name, from_ob.parentElement.id,from_ob.parentElement.style.color,vis)
		VTable.fillTable ();
											
		do_select(from_ob)						
				
	}
		
	function do_check_toggle(from_ob){		
		
		var vis
		
		if ( current_mode > 3 ) 
			return;
			
		if ( from_ob.parentElement.id == "" )
			return;
		

		if (from_ob.outerText == "+"){
			from_ob.innerText = "-"
			vis = false
		}	
		else{
			from_ob.innerText = "+"
			vis = true
			
		}
		
		VMGraph.AddFormula( from_ob.parentElement.name,
							from_ob.parentElement.id,
							from_ob.parentElement.style.color,
							vis)	
		VMGraph.EnableTrace (from_ob.parentElement.id, trace.status)	
		
		if ( current_mode == 5 ){
				
			VTable.AddFormula(from_ob.parentElement.name, from_ob.parentElement.id,from_ob.parentElement.style.color,true)			
			
		}									
		do_select(from_ob)						
				
	}
	
	
	function form_trace_onclick(from_ob){
		
		if ( previous == null ){
			
			
			/* Trace for all functions.
			*/
			VMGraph.EnableTrace (null, from_ob.status)	
			return;
		}		
		VMGraph.EnableTrace (null, from_ob.status)	
	}	  
	
	function form_onsetpoint(){	
	
		VMGraph.AddPoint ( form_x.value, form_y.value, form_pointname.value, form_pointcolor.value, true )
	}
	
	
	function form_onselectpoint(){	
		
		if ( trace.status )
			VMGraph.EnableTrace (null, trace.status)
		
		if ( previous == null ){	
			VMGraph.SelectPoint ( form_x.value, true )
		}	
		else	
			VMGraph.SelectPointOf( previous.id, form_x.value, true )
	}
	
	function form_onroot (){
		var interval = new Number (RootInterval.value)		
		var res = VTable.FindRootOf (interval)		
		if ( res == false ){
			
			var f_name = VTable.GetSelectedFunction ()
			if ( f_name == "" )
				alert("Please, select a function!")
			else
				alert("Cann't find root for '" + f_name + "' in Root Interval!")	
		}else{
			VMGraph.SelectPoint (VTable.GetLastRoot(), true);	
		}
	}
	
	function form_onmark (){
	
		VMGraph.MarkPoint();
	}
	
	function form_onfill (){
		VTable.fillTable ();
	}	
	
	function on_increment (){
	
		text = form_formula.GetText()
		var value = new Number ( text )
		
		step = form_step.value
		var svalue = new Number ( step )
		value = value + svalue
		
		VMGraph.SelectPoint ( value, true )
	}
	
	function on_decrement (){
		text = form_formula.GetText()
		var value = new Number ( text )
				
		step = form_step.value
		var svalue = new Number ( step )
		value = value - svalue	
		
		VMGraph.SelectPoint ( value, true )
	}
	
	var graph1_max = 10
	var graph2_max = 10
	var graph1_left = -5
	var graph2_left = -5
	var graph1_top = -4
	var graph2_top = -4
	var inc_max = 1
	
	var inc_ax = 1
	var dec_ax = -1
		
	function on_zoom (graph_num, el){
	
		if ( el.id == "form_right" ){
			graph1_max = graph1_max + inc_max
		}else{
			graph1_max = graph1_max - inc_max
		}	
		graph1_left = (graph1_max / 2)
		graph1_top = (graph1_max / 2)-1
		VMGraph.Zoom ( (new Number (graph1_max)), (new Number (graph1_left)), (new Number (graph1_top)) )		
	}	
	
	function on_zoom_sum (graph_num, el){
	
		if ( el.id == "form_right" ){
			graph1_max = graph1_max + inc_max
		}else{
			graph1_max = graph1_max - inc_max
		}	
		graph1_left = (graph1_max / 2)
		graph1_top = (graph1_max / 2)-1
		VMGraph1.Zoom ( (new Number (graph1_max)), (new Number (graph1_left)), (new Number (graph1_top)) )		
	}
	
	function on_symbolic ( mode, form_ob){
		
		switch ( mode ){
			case 0: form_formula.SetPrevious (); break;
			case 1: form_formula.SetNext (); break;
			case 2: form_formula.Increment (); VMGraph.ReplaceFormula (form_formula.GetText(), "f1","",true); break;
			case 3: form_formula.Decrement (); VMGraph.ReplaceFormula (form_formula.GetText(), "f1","",true); break;
		}	
	}		



function change_tstep(ob){
VTable.SetStep(ob.value); VTable.fillTable();
}
