function [out] = newtonswitch(in)


numpts=1000;
xmin=str2num(get(findobj('Tag','XMin'), 'String'));
xmax=str2num(get(findobj('Tag','XMax'), 'String'));
ymin=str2num(get(findobj('Tag','YMin'), 'String'));
ymax=str2num(get(findobj('Tag','YMax'), 'String'));
func = get(findobj('Tag', 'Function'),'String');
step=(xmax-xmin)/numpts;

set(findobj('Tag','Plot'),'XLim',[str2num(get(findobj('Tag', 'XMin'),'String')),str2num(get(findobj('Tag', 'XMax'),'String'))]);
set(findobj('Tag','Plot'),'YLim',[str2num(get(findobj('Tag', 'YMin'),'String')),str2num(get(findobj('Tag', 'YMax'),'String'))]);


switch in
case 'range'
   
	xmin=str2num(get(findobj('Tag','XMin'), 'String'));
	xmax=str2num(get(findobj('Tag','XMax'), 'String'));
	ymin=str2num(get(findobj('Tag','YMin'), 'String'));
	ymax=str2num(get(findobj('Tag','YMax'), 'String'));
	func = get(findobj('Tag', 'Function'),'String');
 
   
   set(findobj('Tag','Plot'),'XLim',[str2num(get(findobj('Tag', 'XMin'),'String')),str2num(get(findobj('Tag', 'XMax'),'String'))]);
	set(findobj('Tag','Plot'),'YLim',[str2num(get(findobj('Tag', 'YMin'),'String')),str2num(get(findobj('Tag', 'YMax'),'String'))]);
	set(findobj('Tag','newtslider'), 'Min', xmin);
 	set(findobj('Tag','newtslider'), 'Max', xmax);

 	x=get(findobj('Tag','newtslider'),'Value');

	case 'Refresh'
   
  cla;  
  x=xmin;
  for k=1:numpts
    x=x+step;
    xv(k)=x;
    yv(k)=eval(func);
 end
 line([xmin,xmax],[0,0],'color','black');
 line([0,0],[ymin,ymax],'color','black');
 line(xv,yv);
 set(findobj('Tag','newtslider'), 'Min', xmin);
 set(findobj('Tag','newtslider'), 'Max', xmax);

   
case 'newtslider'
 set(findobj('Tag','newtslider'), 'Min', xmin);
 set(findobj('Tag','newtslider'), 'Max', xmax);

 x=get(findobj('Tag','newtslider'),'Value');
 
 line([x,x],[ymin,ymax],'color','green');
case 'Next'
   
   x=get(findobj('Tag','newtslider'),'Value');
   yy=eval(func);
   xx=x;
   x=x+.00000000001;
   xp=x; 
   yp=eval(func);
   xext1=(xx*(ymin-yp)+xp*(yy-ymin))/(yy-yp);
   xext2=(xx*(ymax-yp)+xp*(yy-ymax))/(yy-yp);
   
   
   xx1=xx;
   xx=(xp*yy-xx*yp)/(yy-yp);
   fprintf(1,'New x-cordinate is: %f\n',xx);
   if (xx < xmin) 
      set(findobj('Tag','XMin'),'String',num2str(xx-1));
     	set(findobj('Tag','newtslider'), 'Min', xx-1);
   end
   
   if (xx> xmax ) 
      set(findobj('Tag','XMax'),'String',num2str(xx+1));
      set(findobj('Tag','newtslider'), 'Max', xx+1);
   end
   set(findobj('Tag','Plot'),'XLim',[str2num(get(findobj('Tag', 'XMin'),'String')),str2num(get(findobj('Tag', 'XMax'),'String'))]);
   set(findobj('Tag','newtslider'), 'Value', xx);
   newtonswitch('Refresh');
   newtonswitch('newtslider');
   line([xext1,xext2],[ymin,ymax],'color','red');
   
otherwise,
  fprintf(1,'Unknown argument to "newtonswitch". Try again.\n');
end
