/**
 * AJAX functions!
 *
 * Funkcije za asinhrono branje podatkov iz streznika.
 * Narejeno z rahlo pomocjo marele.com
 *
 * @author ratko@kramfid.org
 */


/**
 * Funkcija vrne objekt, katerega id podamo kot parameter.
 *
 * @param string id id objekta, ki ga poiscemo med elementi HTML strani.
 */
function getById(id) {
        if (document.getElementById)
                return document.getElementById(id);
        return document.all[id];
}


/**
 * Funkcija vrne XMLHttpRequest objekt, ki izvede AJAX
 */
function getRPCObject() {
        var req;
        if (window.XMLHttpRequest)
                req = new XMLHttpRequest();
        else if (window.ActiveXObject)
                req = new ActiveXObject("Microsoft.XMLHTTP");
        return req;
}


/**
 * Funkcija poklice XMLHttpRequest objekt in nastavi katera funkcija se bo klicala, ko XMLHttpRequest dobi podatke
 *
 * @param string method POST ali GET
 * @param string URL, ki se poklice
 * @param string data podatki, ki se posljejo, ce gre request rpeko POST metode (null za GET)
 * @param function procRequestFunct pointer na funkcijo, ki naj se poklice, ko XMLHttpRequest dobi podatke
 */
function loadXMLDoc( method, url, data, procRequestFunct ) {

        req = getRPCObject();

        if(!req)
                return false;

        req.onreadystatechange = procRequestFunct;
        req.open(method, url, true);

//        req.setRequestHeader("Content-Type", "text/html; charset=ISO-8859-2");

        if (data != null) {
                req.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-2' );
                req.send( data );
        } else {
                req.send('');
        }

        return req;
}


/**
 * Funkcija vrne:
 *      0: XMLHttpRequest se ni dobil podatkov,
 *      1: XMLHttpRequest je dobil podatke (200 ali 404 je status serverja),
 *     -1: server ni vrnil 200 ali 404
 */
function processReqChange(req) {

        if (!req)
                return 0;

        if (req.readyState == 4) {
                // only if "OK"
                if ((req.status == 200) || (req.status == 404)) {
                        return 1; // it's safe now go ahead
                } else {
                        return -1;
                }
        }

        return 0;
}


/**
 * Funkcija vrne srednji del vsebine clanka
 *
 * @param int article_id id clanka, za katerega vzamemo podatke iz streznika
 */
function ajax_load_article( article_id ) {

        if (!article_id)
                return;

        var url = '/ajax/article_' + article_id + '.html';

        var func = function()
                   {
                        var rs = processReqChange(req);

                        if (rs == 1) {
                                var div_content = getById('content');

                                if (!div_content) {
                                        document.location.href='/bin/article.php?article_id=' + article_id;
                                        return;
                                }

                                if (req.responseText == 'NOT FOUND') {
                                        document.location.href='/bin/article.php?article_id=' + article_id;
                                        return;
                                }

                                div_content.innerHTML = req.responseText;
                                scroll(0,0);
                                document.title = '24ur.com';

                                ajax_video_cnt = 0;
                                ajax_javascript( req.responseText );
                        }

                        if (rs == -1) {
                                document.location.href='/bin/article.php?article_id=' + article_id;
                                return false;
                        }
                   }

        var req = loadXMLDoc( 'POST', url, null, func );
}


/**
 * Funkcija pregleda responseText, in iz njega izlusci vso javascript kodo. najdeno
 *      kodo nato izvede preko eval() funkcije.
 *
 * @param string responseText Tekst, v katerem iscemo javascript
 */
function ajax_javascript(responseText) {
        var ScriptFragment = '(?:<script.*?>)((\n|.)*?)(?:</script>)';

        var match    = new RegExp(ScriptFragment, 'img');
        var scripts  = responseText.match(match);

        if(scripts) {
                var js  = '';
                var tmp = '';
                for(var s = 0; s < scripts.length; s++) {
                        var match = new RegExp(ScriptFragment, 'im');
                        var tmp = scripts[s].match(match)[1];

                        if (tmp.indexOf('banner_show') == -1)
                                js += tmp;
                }

               eval(js);
        }
}


/**
 * Funkcija poslje na server zahtevo za posiljanje clanka.
 * Ce streznik odgovori z 'OK', potem je bil clanek poslan, drugace ne.
 *
 * Podatke dobimo direktno iz forme za posiljanje clanka
 */
function ajax_article_send() {

        var url        = '/bin/article_send_2.php';
        var uniq_id    = document.form1.uniq_id.value;
        var key        = document.form1.key.value;
        var article_id = document.form1.article_id.value;
        var email_from = document.form1.email_from.value;
        var email_to   = document.form1.email_to.value;
        var body       = document.form1.body.value;

        var data = 'ajax=1&uniq_id=' + uniq_id + '&key=' + key + '&article_id=' + article_id + '&email_from=' + email_from + '&email_to=' + email_to + '&body=' + body;

        var func = function()
                   {
                        if (processReqChange(req)) {
                                var span_sendarticlemsg = getById('sendarticlemsg');

                                if (!span_sendarticlemsg)
                                        return false;

                                if (req.responseText == 'OK')
                                        span_sendarticlemsg.innerHTML = '<span style="color:green"><b>Članek je bil uspešno poslan.</b></span>';
                                else
                                        span_sendarticlemsg.innerHTML = '<span style="color:red"><b>Napaka pri pošiljanju člnaka. Preverite podatke.</b></span>';
                        }
                   }

        var req = loadXMLDoc( 'POST', url, data, func );
}


/**
 * Funkcija poslje na streznik glas uporabnika.
 * Ce streznik odgovori z 'OK', je glas sprejel uspesno.
 */
function ajax_poll_vote() {

        var url        = '/furniture/system/vote.php';
        var site       = document.vote24ur.site.value;
        var poll_id    = document.vote24ur.poll_id.value;
        var section_id = document.vote24ur.section_id.value;
        var vote       = document.vote24ur.vote.value;

        var data = 'ajax=1&site=' + site + '&poll_id=' + poll_id + '&section_id=' + section_id + '&vote=' + vote;

        var func = function()
                   {
                        if (processReqChange(req)) {
                                var span_anketa_votes = getById('anketa_votes');
                                var span_anketa_vote_ok = getById('anketa_vote_ok');
                                var span_anketa_vote_bad = getById('anketa_vote_bad');

                                if (!span_anketa_votes || !span_anketa_vote_ok || !span_anketa_vote_bad)
                                        return false;

                                if (req.responseText == 'OK') {
                                        span_anketa_votes.style.display = 'none';
                                        span_anketa_vote_ok.style.display = '';
                                        span_anketa_vote_bad.style.display = 'none';
                                } else {
                                        span_anketa_votes.style.display = 'none';
                                        span_anketa_vote_ok.style.display = 'none';
                                        span_anketa_vote_bad.style.display = '';
                                }
                        }
                   }

        var req = loadXMLDoc( 'POST', url, data, func );
}


/**
 * Funkcija poslje na server komentar uporabnika.
 * Ce streznik odgovori z 'OK', potem je bil komentar shranjen, drugace ne.
 *
 * Podatke dobimo direktno iz forme za posiljanje komentarja
 */
function ajax_comment_send() {

        var url        = '/bin/ajax/comment_save.php';
        var article_id = document.form_comment.article_id.value;
        var email      = document.form_comment.email.value;
        var pwd        = document.form_comment.pwd.value;
        var txt        = document.form_comment.txt.value;

//	email = string_clean_xml(email);
//	pwd = string_clean_xml(pwd);
//	txt = string_clean_xml(txt);
//	txt = escape(txt);
	txt = txt.replace('&', '%26');
	var data = 'article_id=' + article_id + '&email=' + email + '&pwd=' + pwd + '&text=' + txt;

	var span_comment_msg = getById('span_comment_msg');
        if ( !span_comment_msg)
                return false;

        span_comment_msg.innerHTML = "Pošiljanje podatkov...";

        var func = function()
                   {
                        if (processReqChange(req)) {

				var span_comment_msg = getById('span_comment_msg');
                                if (!span_comment_msg)
                                        return false;

                                var result = req.responseText.substring(0,3);
                                var answer = req.responseText.substring(3);

                                if (result == 'OK-') {
					var form_contents = getById('form_contents');
                                        if (!form_contents)
                                                return false;

					var dummy_comment = getById('dummy_comment');
                                        if (!dummy_comment)
                                                return false;

                                        form_contents.innerHTML = '<br/><span style="color:green;padding-left:30px;margin-left:30px"><b>Vaš komentar je bil shranjen.</b> Zahvaljujemo se vam za sodelovanje.<br/><br/></span>';
                                        dummy_comment.innerHTML = answer;
                                        dummy_comment.style.display = '';
                                }
                                if (req.responseText == 'PWD')
                                        span_comment_msg.innerHTML = '<span style="color:red"><b>Vpisali ste napačno geslo ali napačen email naslov!</b></span>';
                                if (req.responseText == 'ERR')
                                        span_comment_msg.innerHTML = '<span style="color:red"><b>Napaka pri pošiljanju komentarja. Prosimo, preverite vpisane podatke.</b></span>';
                        }
                   }
        var req = loadXMLDoc( 'POST', url, data, func );
}


/**
 * Funkcija dobi HTML s komentarji clanka.
 * Ce streznik odgovori z 'OK', potem smo dobili HTML, drugace je bila napaka.
 */
function ajax_get_comments( article_id, page, p_all_items, order ) {

        var url = '/bin/ajax/comments.php?article_id=' + article_id + '&page=' + page + '&p_all_items=' + p_all_items + "&order=" + order;

        var func = function()
                   {
                        if (processReqChange(req)) {

                                var result = req.responseText.substring(0,3);
                                var comments = req.responseText.substring(3);

                                if (result == 'OK-') {

                                        var comments_container = getById('comments_container');
                                        if (!comments_container)
                                                return false;

                                        comments_container.innerHTML = comments;
                                }
                        }
                   }

        var req = loadXMLDoc( 'POST', url, null, func );
}

/**
 * This function execute PHP file, which write into database rating for current article
 */
function ajax_put_vote(article_id, vote) {
	var url = '/bin/ajax/article_vote.php?article_id=' + article_id + '&rate=' + vote;
        var func = function() {
                        /*if (processReqChange(req)) {

                                var result = req.responseText.substring(0,3);
                                var votes = req.responseText.substring(3);

                                if (result == 'OK-') {

                                        var votes_container = getById('article_vote_right_container');
                                        if (!votes_container)
                                                return false;

                                        votes_container.innerHTML = votes;
                                }
                        }*/
		}
        var req = loadXMLDoc( 'POST', url, null, func );
}

/**
 * Funkcija zahteva posiljanje SuDoKu gamea naslovniku
 * Ce streznik odgovori z 'OK', potem je bilo poslano, drugace ne.
 *
 * Podatke dobimo direktno iz forme za posiljanje komentarja
 */
function ajax_sdk_send() {
        var url        = '/bin/ajax/sdk_send.php';
        var email      = document.form_sdk.email.value;
        var posilja    = document.form_sdk.posilja.value;
        var sporocilo  = document.form_sdk.sporocilo.value;

        var data = 'email=' + email + '&posilja=' + posilja + '&sporocilo=' + sporocilo;
	var span_sdk_msg = getById('span_sdk_msg');

        if (!span_sdk_msg) return(false);

        span_sdk_msg.innerHTML = "Po&#353iljam...";

        var func = function()
                   {
                        if (processReqChange(req)) {
                                if ( !(span_sdk_msg = getById('span_sdk_msg')) )
                                        return false;

                                var result = req.responseText.substring(0,3);
                                var answer = req.responseText.substring(3);

                                if (result == 'OK-') {
					var email_field = getById('email');
					if (email_field) email_field.value = "";
					span_sdk_msg.innerHTML = "<b>Poslano na naslov <br>"+email+"</b>";
                                } else {
					span_sdk_msg.innerHTML = '<span style="color:red;"><strong>'+req.responseText+'</strong></span>';
				}

                        }
                   }
        var req = loadXMLDoc( 'POST', url, data, func );
}

/**
 * Funkcija preveri ali je user prijavljen ali ne
 * Vse se doloci na osnovi piskotka
*/

function ajax_userbox(mode) {
        var url        = '/bin/ajax/userbox.php';

	var span_userbox = getById('span_userbox');
	var data = "";

//	alert(mode);

	if (mode==0) {
		var sesbit = readCookie("sesbit");
		if (sesbit!=null) {
			sesbit = unescape(sesbit);
			var res = sesbit.substring(0,3);
	                var ans = sesbit.substring(3);
			ans = ans.replace(/#/g,"<br/>");
			ans = ans.replace(/\+/g," ");
			if (res=="OK-") {
				span_userbox.innerHTML = "Prijavljen:<br/>"+ans+"<br/>";
				span_userbox.style.display="";
				getById("userbox_table").style.display='none';
				getById("userbox_logout").style.display="";
				return;
			}
			if (res=="FRM") {
				getById("userbox_table").style.display="";
				getById("userbox_logout").style.display='none';
				return;
			}

		}
	}

	if (mode==2) {
		data = "act=odjavi";
	}


	span_userbox.innerHTML = "";

	if (mode==1) {
		var username = getById('userbox_username').value;
        	var password    = getById('userbox_password').value;
//		getById("userbox_table").style.display='none';
		data = 'username='+username+'&password='+password;
	}



        var func = function()
                   {
                        if (processReqChange(req)) {
                                if ( !(span_userbox = getById('span_userbox')) ) return false;

                                var result = req.responseText.substring(0,3);
                                var answer = req.responseText.substring(3);
				answer = answer.replace(/#/g,"<br/>");
				if (result == 'OK-') {
					span_userbox.innerHTML = "Prijavljen:<br/>"+answer+"<br/>";
					span_userbox.style.display="";
					getById("userbox_table").style.display='none';
					getById("userbox_logout").style.display="";
				}
				if (result == 'FRM') {
                                        span_userbox.innerHTML = answer;
                                        span_userbox.style.display="";

					getById("userbox_table").style.display="";
					getById("userbox_logout").style.display='none';
				}
                        }
                   }

	var req = loadXMLDoc( 'POST', url, data, func );
}

function readCookie(name)
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++)
	{
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

/**
 * USER ARTICLE: login function
 *
 * This function seds email and password and informs user if they are OK or not.
 */
function ajax_ua_login_check() {

        var url        = '/bin/ajax/user_login.php';
        var email      = document.form_1.email.value;
        var pwd        = document.form_1.pwd.value;

        url += '?email=' + email + '&pwd=' + pwd;

        var span_login_msg = getById('span_login_msg');
        var btn_login = getById('btn_login');

        span_login_msg.innerHTML = "Prosimo počakajte ... ";
        btn_login.style.display = 'none';

        var func = function()
                   {
                        if (processReqChange(req)) {
                                var span_login_msg = getById('span_login_msg');
                                var btn_login = getById('btn_login');

                                var result = req.responseText;

                                if (result == 'OK') {
                                        var span_login = getById('login_td');
                                        span_login.innerHTML = '<span style="color:green;padding-left:30px;margin-left:30px"><b>Login OK.&nbsp; <br/></span>';

                                        document.form_1.pwd_hidden.value = document.form_1.pwd.value;
                                        document.form_1.email_hidden.value = document.form_1.email.value;

                                        document.form_1.pwd.disabled = true;
                                        document.form_1.email.disabled = true;

                                        document.form_1.title.disabled = false;
                                        document.form_1.place.disabled = false;
                                        document.form_1.txt.disabled = false;
                                        document.form_1.date.disabled = false;
                                        document.form_1.anon.disabled = false;
                                        document.form_1.phone.disabled = false;

                                        document.form_1.file_1.disabled = false;
                                        document.form_1.file_2.disabled = false;
                                        document.form_1.file_3.disabled = false;
                                        document.form_1.file_4.disabled = false;
                                        document.form_1.file_5.disabled = false;

                                        getById('ua_btn_send').disabled = false;
                                }

                                if (req.responseText == 'ERR') {
                                        span_login_msg.innerHTML = '<span style="color:red"><b>Vnesli ste napačne podatke. </b></span>';
                                        btn_login.style.display = '';
                                }
                        }
                   }

        var req = loadXMLDoc( 'POST', url, null, func );
}
