import java.io.*;
import java.util.*;
import java.net.*;


public class parser extends Thread {
	protected monitor mymon;
	protected urlmonitor myumon;
	protected webpage mypage;
	protected data_gatherer wdata;

	public parser(monitor mon,urlmonitor umon, data_gatherer dat, String name){
		super(name);
		mymon = mon;
		myumon = umon;
		wdata = dat;
	}
	public void run(){
		do{
			if(myumon.dbug()){
				System.out.println("Run " + getName());
			}
			long startTime = System.currentTimeMillis();
			if(mypage == null){
				mypage = (webpage)mymon.getpage();
			}
			//System.out.println("PARSER**********" + mypage);
			if(mypage != null){
				getlinks(mypage.getpage(), mypage.geturl());
				long endTime = System.currentTimeMillis();
				mypage.setParTime(endTime - startTime);
				wdata.process(mypage);

			}else{
				//if there are no pages to parse yield
				//yield();
			}
			mypage = null;
		}while(mymon.isrunning());

	}

	public void getlinks(String buffer, String url){
			int start, start2, stop, stop2;
			if(buffer != null){
				buffer = buffer.toLowerCase();
			do {
			    start = buffer.indexOf("href=");
			    if (start == -1) {
				if (buffer.length() >= 6) buffer = buffer.substring(buffer.length()-6);
				else buffer = "";
				break;
			    }
			    start = start + 6;
			    stop = buffer.indexOf("\"",start);
			    stop2 = buffer.indexOf('>',start);
			    if (stop == -1) stop = stop2;
			    if (stop2 != -1 && stop2 < stop) stop = stop2;
			    stop2 = buffer.indexOf('#',start);
			    if (stop == -1) stop = stop2;
			    if (stop2 != -1 && stop2 < stop) stop = stop2;
			    if (stop == -1)
			    {
				buffer = buffer.substring(start-6);
				break;
			    }
				String newLink = buffer.substring(start-1,stop);
				//System.out.println(newLink);
				if(newLink.startsWith("\"")){
					newLink = newLink.substring(1,newLink.length());
				}
				String name = "";
				try{
					URL oldURL = new URL(url);
			    	URL linkURL = new URL(oldURL,newLink);
			    	name = linkURL.toExternalForm();
				}
				catch (Exception e) {}
			    //System.out.println(name);
			    //if (name.startsWith("http:")){
					//let the data gatherer decide the priority of this link
					int intLevel = wdata.checkurl(url, name);
					if(intLevel >= 0){
						myumon.addurl(name,intLevel);
					}
			    //}
			    buffer = buffer.substring(stop+1);
			} while (true);
			}
			else{
				System.out.println("Buffer was empty");
			}
	}



}