// Request object
var req = new Object();
var captcha = new Object();
var code = new Object();

// Google code
function google_search () {

    document.getElementById('loading_google').style.display = "block";
    document.getElementById('result_google').innerHTML = "";
    google_ajax_conn();

}

// MSN code
function msn_search () {

    document.getElementById('loading_msn').style.display = "block";
    document.getElementById('result_msn').innerHTML = "";
    msn_ajax_conn();

}

// Yahoo code
function yahoo_search () {

    document.getElementById('loading_yahoo').style.display = "block";
    document.getElementById('result_yahoo').innerHTML = "";
    yahoo_ajax_conn();

}

var msn = new Object();
// State handler for AJAX connection
function msnStateHandler () {

	if (msn.readyState == 4) {
	    if  ((msn.status == 200) ||(msn.status == 0)) {
		var res = eval("(" + msn.responseText + ")");
		// HTML output
		document.getElementById('loading_msn').style.display = "none";
		document.getElementById('result_msn').innerHTML = res.html;
	    } else {
		alert('Nincs válasz a szervertől: ' + msn.status);
	    }
	    return true;
	}
	return true;

}

var google = new Object();
// State handler for AJAX connection
function googleStateHandler () {

	if (google.readyState == 4) {
	    if  ((google.status == 200) ||(google.status == 0)) {
		var res = eval("(" + google.responseText + ")");
		// HTML output
		document.getElementById('loading_google').style.display = "none";
		document.getElementById('result_google').innerHTML = res.html;
	    } else {
		alert('Nincs válasz a szervertől.');
	    }
	    return true;
	}
	return true;

}

var yahoo = new Object();
// State handler for AJAX connection
function yahooStateHandler () {

	if (yahoo.readyState == 4) {
	    if  ((yahoo.status == 200) ||(yahoo.status == 0)) {
		var res = eval("(" + yahoo.responseText + ")");
		// HTML output
		document.getElementById('loading_yahoo').style.display = "none";
		document.getElementById('result_yahoo').innerHTML = res.html;
	    } else {
		alert('Nincs válasz a szervertől.');
	    }
	    return true;
	}
	return true;

}

// Making new Ajax connection
function msn_ajax_conn () {

    // Init request object
    try {
	msn = new XMLHttpRequest();
    } catch (error) {
	try {
	    msn = new ActiveXObject("Microsoft.XMLHTTP");
	} catch (error) {
	    alert("Kapcsolat hiba: " + error);
	}
    }

    try {
	// Retrieve user data from form
	var keyword = document.getElementById("keyword").value;
	keyword = encodeURIComponent(keyword);
	var search_lang = "";
	if (document.getElementById("search_lang_other").value != "") {
	    search_lang = document.getElementById("search_lang_other").value;
	} else if (document.getElementById("search_lang_hu").checked) {
	    search_lang = "hu";
	} else if (document.getElementById("search_lang_en").checked) {
	    search_lang = "en";
	} else if (document.getElementById("search_lang_de").checked) {
	    search_lang = "de";
	}
	// Open connection
	var uri = queryhost + "/api.php?domain=" + document.getElementById('domain').value + "&keyword=" + keyword + "&engine=msn&output=mixed&lang=" + document.getElementById('lang').value + "&search_lang=" + search_lang + "&google_key=" + document.getElementById("google_key").value + "&yahoo_key=" + document.getElementById("yahoo_key").value + "&msn_key=" + document.getElementById("msn_key").value + "&sessid=" + document.getElementById('sessid').value;
	msn.open("GET", uri);
	msn.send(null);
    } 
    catch (error) {
	alert("Open error: " + error);
    }

    // State handling
    msn.onreadystatechange = msnStateHandler;
    return true;

}

// Making new Ajax connection
function google_ajax_conn () {

    // Init request object
    try {
	google = new XMLHttpRequest();
    } catch (error) {
	try {
	    google = new ActiveXObject("Microsoft.XMLHTTP");
	} catch (error) {
	    alert("Kapcsolat hiba: " + error);
	}
    }

    try {
	// Retrieve user data from form
	var keyword = document.getElementById("keyword").value;
	keyword = encodeURIComponent(keyword);
	var search_lang = "";
	if (document.getElementById("search_lang_other").value != "") {
	    search_lang = document.getElementById("search_lang_other").value;
	} else if (document.getElementById("search_lang_hu").checked) {
	    search_lang = "hu";
	} else if (document.getElementById("search_lang_en").checked) {
	    search_lang = "en";
	} else if (document.getElementById("search_lang_de").checked) {
	    search_lang = "de";
	}
	// Open connection
	var uri = queryhost + "/api.php?domain=" + document.getElementById('domain').value + "&keyword=" + keyword + "&engine=google&output=mixed&lang=" + document.getElementById('lang').value + "&search_lang=" + search_lang + "&google_key=" + document.getElementById("google_key").value + "&yahoo_key=" + document.getElementById("yahoo_key").value + "&msn_key=" + document.getElementById("msn_key").value + "&sessid=" + document.getElementById('sessid').value;
	google.open("GET", uri);
	google.send(null);
    } 
    catch (error) {
	alert("Open error: " + error);
    }

    // State handling
    google.onreadystatechange = googleStateHandler;
    return true;

}
// Making new Ajax connection
function yahoo_ajax_conn () {

    // Init request object
    try {
	yahoo = new XMLHttpRequest();
    } catch (error) {
	try {
	    yahoo = new ActiveXObject("Microsoft.XMLHTTP");
	} catch (error) {
	    alert("Kapcsolat hiba: " + error);
	}
    }

    try {
	// Retrieve user data from form
	var keyword = document.getElementById("keyword").value;
	keyword = encodeURIComponent(keyword);
	var search_lang = "";
	if (document.getElementById("search_lang_other").value != "") {
	    search_lang = document.getElementById("search_lang_other").value;
	} else if (document.getElementById("search_lang_hu").checked) {
	    search_lang = "hu";
	} else if (document.getElementById("search_lang_en").checked) {
	    search_lang = "en";
	} else if (document.getElementById("search_lang_de").checked) {
	    search_lang = "de";
	}
	// Open connection
	var uri = queryhost + "/api.php?domain=" + document.getElementById('domain').value + "&keyword=" + keyword + "&engine=yahoo&output=mixed&lang=" + document.getElementById('lang').value + "&search_lang=" + search_lang + "&google_key=" + document.getElementById("google_key").value + "&yahoo_key=" + document.getElementById("yahoo_key").value + "&msn_key=" + document.getElementById("msn_key").value + "&sessid=" + document.getElementById('sessid').value;
	yahoo.open("GET", uri);
	yahoo.send(null);
    } 
    catch (error) {
	alert("Open error: " + error);
    }

    // State handling
    yahoo.onreadystatechange = yahooStateHandler;
    return true;

}

// State handler for Code validation connection
function codeStateHandler () {

    if (code.readyState == 4) {
	if  ((code.status == 200) || (code.status == 0)) {
	    if (code.responseText != 0) {
		document.getElementById('sessid').value = code.responseText;
		yahoo_search();
		google_search();
		msn_search();
	    } else {
		alert("Helytelenül adta meg az ellenőrző kódot.");
	    }
	} else {
	    alert('Nincs válasz a szervertől.');
	}
	return true;
    }
    return true;

}

// Check is user given code is valid
function validate_code() {

    // Init request object
    try {
	code = new XMLHttpRequest();
    } catch (error) {
	try {
	    code = new ActiveXObject("Microsoft.XMLHTTP");
	} catch (error) {
	    alert("Kapcsolat hiba: " + error);
	}
    }

    try {
	var code_value = document.getElementById("code").value;
	if (code_value.match(/^[a-z0-9A-Z]{5}$/) && document.getElementById('keyword').value.length != 0 && document.getElementById('domain').value.length != 0) {
	    var uri = queryhost + "/session.php?code=" + document.getElementById("code").value;
	    code.open("GET", uri);
	    code.send(null);
	} else {
		alert("Nem töltött ki minden mezőt helyesen!");
	}
    } catch (error) {
	alert("Open error: " + error);
    }

    // Code state handling
    code.onreadystatechange = codeStateHandler;
    return true;

}

// Init
function init_search () {

    validate_code();

}

// State handler for Captcha connection
function captchaStateHandler () {

    if (captcha.readyState == 4) {
	if  ((captcha.status == 200) || (captcha.status == 0)) {
	    var res = captcha.responseText;
	    res = res.replace(/ /g, "&nbsp;");
	    res = res.replace(/\\n/g, "<br />");
	    res = eval("(" + res  + ")");
	    if (res['error']) {
		res['error'] = res['error'].replace(/\&nbsp;/g, " ");
	    	res['error'] = res['error'].replace(/\<br \/\>/g, "\n");
		alert(res['error']);
	    } else {
		// HTML output
		for (i = 0; i < res['code'].length; i++) {
		    document.getElementById('code' + i).innerHTML = res['code'][i];
		}
	    }
	} else {
	    alert('Nincs válasz a szervertől.');
	}
	return true;
    }
    return true;

}

function captchaInit () {

    // Init request object
    try {
	captcha = new XMLHttpRequest();
    } catch (error) {
	try {
	    captcha = new ActiveXObject("Microsoft.XMLHTTP");
	} catch (error) {
	    alert("Kapcsolat hiba: " + error);
	}
    }

    try {
	var uri = queryhost + "/session.php?main=1&lang=" + document.getElementById('lang').value;
	captcha.open("GET", uri);
	captcha.send(null);
    } catch (error) {
	alert("Open error: " + error);
    }

    // Captcha state handling
    captcha.onreadystatechange = captchaStateHandler;
    return true;

}

// Attaching function to actionhandler
function addEvent(obj, evType, fn){
    if (obj.addEventListener){
	obj.addEventListener(evType, fn, false);
	return true;
    } else if (obj.attachEvent){
	return obj.attachEvent("on"+evType, fn);
    }
    return false;
}

// On which event which function to run
function loadEvents (e) {
    captchaInit();
    addEvent(document.getElementById('submit'), 'click', init_search);
    addEvent(document.getElementById('search_lang_other'), 'change', toggle_lang);
}

// On document load, run load events
addEvent(window, 'load', loadEvents);
