/**
 * @author E
 */

/**
 * requests
 */

var ajaxreq = null;
var requestIntervalFast = 500;
var requestIntervalSlow = 3000;
var _debug_ = false;
var wndlist = {}; // list of opened window

var _linkStateTmr = -1;
function startLinkState(){
	//linkstate

	_linkStateTmr = setTimeout(function(){
		var req_time = new Date().getTime();
		ajaxreq = $.ajax({
			type: "POST",
			url: "linkstate.php?"+Math.random(),
			async: true,
			cache: false,
			global: false,
			timeout: 7000,
			error: function(XMLHttpRequest, textStatus, errorThrown){
			//cb_error(textStatus, errorThrown);
				jQuery("#linkstate td.lq").removeClass("active");
				jQuery("#linkstate td.lq.slow").addClass("active");
				startLinkState();
			},
			success: function(text){
				var nowtime = new Date().getTime();
				jQuery("#linkstate td.lq").removeClass("active");
				if (!isNaN(req_time)) {
					if (req_time > 0) {
						req_time = nowtime - req_time;
						req_time = parseInt(req_time / 1000);
						if (req_time < 2) {
							jQuery("#linkstate td.lq.fast").addClass("active");
						}
						else {
							if (req_time < 4) {
								jQuery("#linkstate td.lq.normal").addClass("active");
							}
							else {
								jQuery("#linkstate td.lq.slow").addClass("active");
							}
						}
					}
					else {
						req_time = 0;
					}
				}
				startLinkState();
			}
		});

	}, 3000);

}
function stopLinkState(){
	clearTimeout(_linkStateTmr);
}



function abortReq(){
    try {
        if (ajaxreq && ajaxreq.abort) {
            ajaxreq.abort();
            jQuery("div.ajax").text("abort");
        }
    }
    catch (e) {
    }
}

function request(attr){
    var doc = attr.doc;
    var sync = attr.sync;
	var _timeout = (sync)?30000:attr.timeout || 10000;
    var cb_success = attr.success;
    var cb_failed = attr.failed ||
    function(err, text){
		failed_states_processing("server_down", text);
        //alert("error (" + err + ") in xml body:/n" + text);
    };
    var cb_error = attr.error ||
    function(){
    };

    var _async = !(!cb_success);
    //jQuery("#title").text(_async);

	//alert("request:\n"+xmlstr(doc));

    ajaxreq = $.ajax({
        type: "POST",
        url: "/request.html",
        async: _async && (!sync),
		timeout: _timeout,
		cache: false,
        data: {
            xml: xmlstr(doc)
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
            cb_error(textStatus, errorThrown);
        },
        success: function(text){
            //alert(text);
            //alert("answer:\n"+text);
            var dom = strxml(text);
            if (Sarissa.getParseErrorText(dom) == Sarissa.PARSED_OK) {
                // The document was parsed/loaded just fine, go on
                if (_async) {
                    cb_success(dom);
                }
                else {
                    return dom;
                }
                            }
            else {
                // The document was not loaded correctly! Inform the user:
                cb_failed(Sarissa.getParseErrorText(dom), text);
            }
        }
    });
}


function xmlstr(dom){
    var s = "";
    try {
        if (dom){
            s = (new XMLSerializer()).serializeToString(dom);
            }
    }
    catch (e) {
        s = e.message;
    }
    return s;
}

function strxml(txt){
    return (new DOMParser()).parseFromString(txt, "text/xml");
}




/**
 * languages
 */
 var lastLanguage = "lv";


 function translate(lng, fromNode){
 	if(!lng){ lng = "en";}
	lastLanguage = lng;
	if(!fromNode){ fromNode = jQuery("body"); }
	var dict = lang[lng];
	jQuery("[lang]", fromNode).each(function(){
		var el = jQuery(this);
		var mark = el.attr("lang");
//		if(mark) mark = mark.toLowerCase();
		var s = dict[mark];
		if(!s) s = el.attr("default");
		if(!s) s = el.attr("value");
		if(!s) s = mark;
		el.html(s);
	});
 }
function translateStr(lng, str, defval){
 	if(!lng){ lng = "en";}
	lastLanguage = lng;
	var dict = lang[lng];
//	if(str) str = str.toLowerCase();
	return dict[str] || defval || str;
}


 function retranslate(fromNode){
 	if(!lastLanguage || lastLanguage == ""){ lastLanguage = "en";}
 	translate(lastLanguage, fromNode);
 }
 function retranslateStr(str, defval){
 	if(!lastLanguage || lastLanguage == ""){ lastLanguage = "en";}
 	return translateStr(lastLanguage, str, defval);
 }

function drawLangSwitcher(jEl){
	var s = getCookie("lang");
	if(s !== "" && lang[s]){ lastLanguage = s; }
	jEl.each(function(){
		var sfl = jQuery(this);
		for (var l in lang) {
			var m = jQuery("<div>")
				.appendTo(sfl)
				.text(l)
				.click(function(){
					sfl.children("div").removeClass("active");
					jQuery(this).addClass("active");
					translate(jQuery(this).text(), jQuery("body"));
					setCookie("lang", jQuery(this).text(), 365);
				});
			if(lastLanguage === l){
				m.addClass("active");
			}
		}
	});
}

/**
 * palette
 */


function paletteInit(){
	jQuery("#palette").change(function(){
		setPallete(jQuery(this).val());
	});
	for(var i in palette){
		jQuery("<option></option>").attr("mark",i).val(i).appendTo(jQuery("#palette"));
	}
    retranslate("#palette");
	jQuery("#palette").change();
/*
	jQuery("<option></option>").attr("mark","...").val("").appendTo(jQuery("#palette"));

 	jQuery("<div></div>").appendTo("body").hide().load("css/palette/ a[href$='.css']",function(){
		//alert(jQuery(this).html());
		jQuery("a",jQuery(this)).each(function(){
			var v = jQuery(this).text();
			jQuery("<option></option>").attr("mark",v).val(v).appendTo("#palette");
		});
        retranslate("#palette");
		jQuery(this).remove();
		jQuery("#palette").change();
	});
*/
}

function loadCSS(src) {
	var css = document.createElement('link');
	css.setAttribute('type', 'text/css');
	css.setAttribute('rel', 'stylesheet');
	css.setAttribute('href', src);
	css.setAttribute('id', 'custom_style');
	var head = document.getElementsByTagName('head').item(0);
	head.appendChild(css);
	return css;
}

function setPallete(name){
	jQuery("#custom_style").remove();
	if(palette[name]){
		loadCSS(palette[name]);
	}
}




/**
 *  links
 */
 function openLink(linkid, param){
	//alert(links[lastLanguage][linkid]);
	if(wndlist[linkid]){ wndlist[linkid].close(); }
	wndlist[linkid] = window.open(links[lastLanguage][linkid]+"?lng="+lastLanguage,linkid,links_param[linkid]);
	setTimeout(function(){
		if (window.focus) {
			if (wndlist[linkid] && wndlist[linkid].focus )wndlist[linkid].focus();
		}
	},1000);
}

function reuseLinks(jNode){
	jQuery("[link]",jNode)
		.unbind("click")
		.click( function(){
			openLink(jQuery(this).attr("link"));
		} );
}



/**
 *  hints
 */


function showHint(hint){
	jQuery("#newsBody").load("hints/"+lastLanguage+"/"+hint+".html?sgn="+Math.random(),function(){
		retranslate(jQuery("#newsBody"));
	});
}

function reuseHints(jNode){
	jQuery("[hint]",jNode)
		.unbind("mouseenter")
		.unbind("mouseleave")
		.mouseenter( function(){
			showHint(jQuery(this).attr("hint"));
		} )
		.mouseleave( function(){
			jQuery("#newsBody").empty();
		} );
}


//cookies
function setCookie(c_name,value,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

function getCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=");
  if (c_start!=-1)
    {
    c_start=c_start + c_name.length+1;
    c_end=document.cookie.indexOf(";",c_start);
    if (c_end==-1) c_end=document.cookie.length;
    return unescape(document.cookie.substring(c_start,c_end));
    }
  }
return "";
}


/*
xml2json v 1.1
copyright 2005-2007 Thomas Frank

This program is free software under the terms of the
GNU General Public License version 2 as published by the Free
Software Foundation. It is distributed without any warranty.
*/

xml2json={
	parser:function(xmlcode,ignoretags,debug){
		if(!ignoretags){ignoretags=""};
		xmlcode=xmlcode.replace(/\s*\/>/g,'/>');
		xmlcode=xmlcode.replace(/<\?[^>]*>/g,"").replace(/<\![^>]*>/g,"");
		if (!ignoretags.sort){ignoretags=ignoretags.split(",")};
		var x=this.no_fast_endings(xmlcode);
		x=this.attris_to_tags(x);
		x=escape(x);
		x=x.split("%3C").join("<").split("%3E").join(">").split("%3D").join("=").split("%22").join("\"");
		for (var i=0;i<ignoretags.length;i++){
			x=x.replace(new RegExp("<"+ignoretags[i]+">","g"),"*$**"+ignoretags[i]+"**$*");
			x=x.replace(new RegExp("</"+ignoretags[i]+">","g"),"*$***"+ignoretags[i]+"**$*")
		};
		x='<JSONTAGWRAPPER>'+x+'</JSONTAGWRAPPER>';
		this.xmlobject={};
		var y=this.xml_to_object(x).jsontagwrapper;
		if(debug){y=this.show_json_structure(y,debug)};
		return y
	},
	xml_to_object:function(xmlcode){
		var x=xmlcode.replace(/<\//g,"§");
		x=x.split("<");
		var y=[];
		var level=0;
		var opentags=[];
		for (var i=1;i<x.length;i++){
			var tagname=x[i].split(">")[0];
			opentags.push(tagname);
			level++
			y.push(level+"<"+x[i].split("§")[0]);
			while(x[i].indexOf("§"+opentags[opentags.length-1]+">")>=0){level--;opentags.pop()}
		};
		var oldniva=-1;
		var objname="this.xmlobject";
		for (var i=0;i<y.length;i++){
			var preeval="";
			var niva=y[i].split("<")[0];
			var tagnamn=y[i].split("<")[1].split(">")[0];
			tagnamn=tagnamn.toLowerCase();
			var rest=y[i].split(">")[1];
			if(niva<=oldniva){
				var tabort=oldniva-niva+1;
				for (var j=0;j<tabort;j++){objname=objname.substring(0,objname.lastIndexOf("."))}
			};
			objname+="."+tagnamn;
			var pobject=objname.substring(0,objname.lastIndexOf("."));
			if (eval("typeof "+pobject) != "object"){preeval+=pobject+"={value:"+pobject+"};\n"};
			var objlast=objname.substring(objname.lastIndexOf(".")+1);
			var already=false;
			for (k in eval(pobject)){if(k==objlast){already=true}};
			var onlywhites=true;
			for(var s=0;s<rest.length;s+=3){
				if(rest.charAt(s)!="%"){onlywhites=false}
			};
			if (rest!="" && !onlywhites){
				if(rest/1!=rest){
					rest="'"+rest.replace(/\'/g,"\\'")+"'";
					rest=rest.replace(/\*\$\*\*\*/g,"</");
					rest=rest.replace(/\*\$\*\*/g,"<");
					rest=rest.replace(/\*\*\$\*/g,">")
				}
			}
			else {rest="{}"};
			if(rest.charAt(0)=="'"){rest='unescape('+rest+')'};
			if (already && !eval(objname+".sort")){preeval+=objname+"=["+objname+"];\n"};
			var before="=";after="";
			if (already){before=".push(";after=")"};
			var toeval=preeval+objname+before+rest+after;
			eval(toeval);
			if(eval(objname+".sort")){objname+="["+eval(objname+".length-1")+"]"};
			oldniva=niva
		};
		return this.xmlobject
	},
	show_json_structure:function(obj,debug,l){
		var x='';
		if (obj.sort){x+="[\n"} else {x+="{\n"};
		for (var i in obj){
			if (!obj.sort){x+=i+":"};
			if (typeof obj[i] == "object"){
				x+=this.show_json_structure(obj[i],false,1)
			}
			else {
				if(typeof obj[i]=="function"){
					var v=obj[i]+"";
					//v=v.replace(/\t/g,"");
					x+=v
				}
				else if(typeof obj[i]!="string"){x+=obj[i]+",\n"}
				else {x+="'"+obj[i].replace(/\'/g,"\\'").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/\r/g,"\\r")+"',\n"}
			}
		};
		if (obj.sort){x+="],\n"} else {x+="},\n"};
		if (!l){
			x=x.substring(0,x.lastIndexOf(","));
			x=x.replace(new RegExp(",\n}","g"),"\n}");
			x=x.replace(new RegExp(",\n]","g"),"\n]");
			var y=x.split("\n");x="";
			var lvl=0;
			for (var i=0;i<y.length;i++){
				if(y[i].indexOf("}")>=0 || y[i].indexOf("]")>=0){lvl--};
				tabs="";for(var j=0;j<lvl;j++){tabs+="\t"};
				x+=tabs+y[i]+"\n";
				if(y[i].indexOf("{")>=0 || y[i].indexOf("[")>=0){lvl++}
			};
			if(debug=="html"){
				x=x.replace(/</g,"&lt;").replace(/>/g,"&gt;");
				x=x.replace(/\n/g,"<BR>").replace(/\t/g,"&nbsp;&nbsp;&nbsp;&nbsp;")
			};
			if (debug=="compact"){x=x.replace(/\n/g,"").replace(/\t/g,"")}
		};
		return x
	},
	no_fast_endings:function(x){
		x=x.split("/>");
		for (var i=1;i<x.length;i++){
			var t=x[i-1].substring(x[i-1].lastIndexOf("<")+1).split(" ")[0];
			x[i]="></"+t+">"+x[i]
		}	;
		x=x.join("");
		return x
	},
	attris_to_tags: function(x){
		var d=' ="\''.split("");
		x=x.split(">");
		for (var i=0;i<x.length;i++){
			var temp=x[i].split("<");
			for (var r=0;r<4;r++){temp[0]=temp[0].replace(new RegExp(d[r],"g"),"_jsonconvtemp"+r+"_")};
			if(temp[1]){
				temp[1]=temp[1].replace(/'/g,'"');
				temp[1]=temp[1].split('"');
				for (var j=1;j<temp[1].length;j+=2){
					for (var r=0;r<4;r++){temp[1][j]=temp[1][j].replace(new RegExp(d[r],"g"),"_jsonconvtemp"+r+"_")}
				};
				temp[1]=temp[1].join('"')
			};
			x[i]=temp.join("<")
		};
		x=x.join(">");
		x=x.replace(/ ([^=]*)=([^ |>]*)/g,"><$1>$2</$1");
		x=x.replace(/>"/g,">").replace(/"</g,"<");
		for (var r=0;r<4;r++){x=x.replace(new RegExp("_jsonconvtemp"+r+"_","g"),d[r])}	;
		return x
	}
};


if(!Array.prototype.push){
	Array.prototype.push=function(x){
		this[this.length]=x;
		return true
	}
};

if (!Array.prototype.pop){
	Array.prototype.pop=function(){
  		var response = this[this.length-1];
  		this.length--;
  		return response
	}
};

