var timeout = 40; // ms
var callback = '';

var timers = new Array();
var koords = new Array();


function requiem_move(oid, xs, ys, as, ws, hs, ciklu, delay, callback) {
	// Xs = array: 0=>X1, 1=>X2, 2=>pagreitis
	if(delay==''){delay = timeout;}
	if(callback==undefined){callback = '';}
	var obj = ge(oid);
	var xa = apdoroti_koordinates(xs, obj, 'x');
	var ya = apdoroti_koordinates(ys, obj, 'y');
	var aa = apdoroti_koordinates(as, obj, 'a');
	var wa = apdoroti_koordinates(ws, obj, 'w');
	var ha = apdoroti_koordinates(hs, obj, 'h');
	
	setProperty(obj, 'x', xa[0]);
	setProperty(obj, 'y', ya[0]);
	setProperty(obj, 'a', aa[0]);
	setProperty(obj, 'w', wa[0]);
	setProperty(obj, 'h', ha[0]);

	if(xa[0]!=xa[1]){requiem_move2(oid, 'x', xa[0], xa[1], xa[2], 0, ciklu, delay, callback);}
	if(ya[0]!=ya[1]){requiem_move2(oid, 'y', ya[0], ya[1], ya[2], 0, ciklu, delay, callback);}
	if(aa[0]!=aa[1]){requiem_move2(oid, 'a', aa[0], aa[1], aa[2], 0, ciklu, delay, callback);}
	if(wa[0]!=wa[1]){requiem_move2(oid, 'w', wa[0], wa[1], wa[2], 0, ciklu, delay, callback);}
	if(ha[0]!=ha[1]){requiem_move2(oid, 'h', ha[0], ha[1], ha[2], 0, ciklu, delay, callback);}
	
}


function requiem_move2(oid, tipas, x1, x2, a, n, ciklu, delay, callback) {
	obj = ge(oid);
	var refid = oid+'_'+tipas;
	if(n==0){x0 = x1;}
	else {var x0 = koords[refid];}
	var poslinkis = requiem_poslinkis(x1, x2, a, n, ciklu);
	var reiksme = x0 + poslinkis;
	koords[refid] = reiksme;
	
	var val = apvalinti(reiksme, 0);
	//ge('span1').innerHTML += '<br>'+n+': '+x0+'+'+poslinkis+' = '+reiksme;
	//ge('span1').innerHTML += '<br>'+n+': '+reiksme;
	
	setProperty(obj, tipas, val);
	n++;
	

	if(n<ciklu){
		timers[refid] = setTimeout("requiem_move2('"+oid+"', '"+tipas+"', "+x1+", "+x2+", "+a+", "+n+", "+ciklu+", "+delay+", '"+callback+"')", delay);
	}
	else {
		setProperty(obj, tipas, x2);
		if((tipas=='h' || tipas=='w') && x2<2){hide(oid);}
		if(callback!=''){eval(callback);}
	}
}




function getProperty(obj, savybe) {
	if(savybe=='x'){var temp = koordinates(obj); return temp[0];}
	else if(savybe=='y'){var temp = koordinates(obj); return temp[1];}
	else if(savybe=='w'){var temp = findDim(obj); return temp[0];}
	else if(savybe=='h'){var temp = findDim(obj); return temp[1];}
	
	else if(savybe=='a') {
		if(obj.style.opacity){var temp = (obj.style.opacity)*100; if(temp==''){temp=100;} return temp;}
		else {return 100;}
	}
	
	else if(savybe=='sx') {var temp = getPageScroll(); return temp[0];}
	else if(savybe=='sy') {var temp = getPageScroll(); return temp[1];}
	
	else if(savybe=='px') {var temp = getPageSize(); return temp[0];} 
	else if(savybe=='py') {var temp = getPageSize(); return temp[1];} 
	else if(savybe=='wx') {var temp = getPageSize(); return temp[2];} 
	else if(savybe=='wy') {var temp = getPageSize(); return temp[3];} 
}

function setProperty(obj, savybe, value) {
	if(savybe=='x'){obj.style.left = value;}
	else if(savybe=='y'){obj.style.top = value;}
	else if(savybe=='w'){obj.style.width = value;}
	else if(savybe=='h'){obj.style.height = value;}
	else if(savybe=='a'){
		obj.style.opacity = value/100;
		obj.style.filter = 'alpha(opacity='+value+')';
	}
}




// MATEMATINES FUNKCIJOS
function requiem_poslinkis(x1, x2, a, n, ciklu) {
	if(a==0){dx = requiem_pagreitis0(x1, x2, n, ciklu);}
	else {dx = requiem_pagreitis1(x1, x2, a, n, ciklu);}
	return dx;
}

function requiem_pagreitis0(x1, x2, n, ciklu) {
	var out = (x2-x1) / ciklu;
	return out;
}

function requiem_pagreitis1(x1, x2, a, n, ciklu) {
	n = n+1;
	var o = (ciklu+1) / 2;
	var v = (x2-x1) / ciklu;
	
	var out = v + ((o-n)*v*a) / (100*o);
	
	return out;
}


function apdoroti_koordinates(s, obj, tipas){
	var out = new Array();
	if(is_array(s)) {
		var pos = koordinates(obj);
		
		if(typeof(s[0])=='number'){out[0] = s[0];}
		else {out[0] = getProperty(obj, tipas);}
		
		if(typeof(s[1])=='number'){out[1] = s[1];}
		else {out[1] = getProperty(obj, tipas);}
		
		if(typeof(s[2])=='number'){out[2] = s[2];}
		else {out[2] = 0;}
	}
	else {
		var pos = getProperty(obj, tipas);
		out[0] = pos;
		out[1] = pos;
		out[2] = 0;
	}
	return out;
}


function apvalinti(val, dec) {
	dec = parseInt(dec);
	var d = Math.pow(10,dec)
	return Math.round(val*d)/d;
}





// PAGALBINES FUNKCIJOS
function showSelectBoxes(){
	var selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "visible";
	}
}

function hideSelectBoxes(){
	var selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "hidden";
	}
}


function showFlash(){
	var flashObjects = document.getElementsByTagName("object");
	for (i = 0; i < flashObjects.length; i++) {
		flashObjects[i].style.visibility = "visible";
	}

	var flashEmbeds = document.getElementsByTagName("embed");
	for (i = 0; i < flashEmbeds.length; i++) {
		flashEmbeds[i].style.visibility = "visible";
	}
}

function hideFlash(){
	var flashObjects = document.getElementsByTagName("object");
	for (i = 0; i < flashObjects.length; i++) {
		flashObjects[i].style.visibility = "hidden";
	}

	var flashEmbeds = document.getElementsByTagName("embed");
	for (i = 0; i < flashEmbeds.length; i++) {
		flashEmbeds[i].style.visibility = "hidden";
	}

}



function getPageScroll(){

	var xScroll, yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
		xScroll = self.pageXOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
		xScroll = document.documentElement.scrollLeft;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
		xScroll = document.body.scrollLeft;	
	}

	arrayPageScroll = new Array(xScroll,yScroll) 
	return arrayPageScroll;
}



function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = window.innerWidth + window.scrollMaxX;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;

	if (self.innerHeight) {	// all except Explorer
		if(document.documentElement.clientWidth){
			windowWidth = document.documentElement.clientWidth; 
		} else {
			windowWidth = self.innerWidth;
		}
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = xScroll;		
	} else {
		pageWidth = windowWidth;
	}
	
	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}


function koordinates(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}

	return [curleft,curtop];
}

function findDim(obj) {
	return [obj.offsetWidth,obj.offsetHeight];
}






// PAPILDOMOS FUNKCIJOS
function nalpha(elem,alpha){
	alpha = Math.round(alpha);
	var el = ge(elem);
	if(el.style.opacity){el.style.opacity=alpha/100;}
	if(el.filters){el.filters.alpha.opacity=alpha;}
}

function ge(elem) {
	return document.getElementById(elem);
}

function gv(elem) {
	return document.getElementById(elem).value;
}

function hide(elem) {
	obj = elem;
	if(typeof(input)!='object') {obj = ge(elem);}
	obj.style.display = 'none';
}

function show(elem) {
	obj = elem;
	if(typeof(input)!='object') {obj = ge(elem);}
	obj.style.display = 'block';
}

function is_array(input){    
	return typeof(input)=='object'&&(input instanceof Array);
}

function checkEmail(email) {
	var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (!filter.test(email)) {return false;}
	else {return true;}
}

function enter() {
	if(key()==13){return true;}
	return false;
}

function key(e) {
	return e?e.which:event.keyCode;
}

function undef(kint) {
	if(kint==null) {return true;}
	if(typeof(kint)=="undefined"){return true;}
	return false;
}

function exists(obj) {
	if(document.getElementById(obj)!=null){return true;}
	return false;
}

function basename(path) {
    return path.replace( /.*\//, "" );
}

function dirname(path) {
    return path.match( /.*\// );
}

function nl2br(text){
	text = escape(text);
	return unescape(text.replace(/%0D%0A/g,'<br>'));
}



// COOKIE FUNKCIJOS
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 "";
}





// AJAX FUNKCIJOS
var http = createRequestObject();
var ajaxText = '';


function ajax_siusti(keys, vals, target, callback) { 
	if(undef(target)){target = 'script/ajax.php';}
	if(undef(callback)){callback = 'ajax_callback';}
	
	var suburl = parametrai(keys, vals);
	http.open('get', target+suburl); 
	http.onreadystatechange = function(){handleResponse(callback);}; 
	http.send(null);
}

function rezultatai(callback){
	//var ev = ajaxText.replace(/=/g, ':');
	var ev = ajaxText;
	if(callback!=''){
		var func = callback+'("'+ev+'");';
		eval(func);
	}
}


function parametrai(keys, vals){
	var out='';
	var params = '?';
	
	for(var i=0; i<keys.length; i++) {
		params+= keys[i]+'='+vals[i]+'&';
	}
	
	var laikas = new Date();
	params+= 'rand='+laikas.getTime();
	
	return params;
}

function parse_get(str, mod) {
	if(undef(mod)){mod = '=';}
	var out = new Array();
	var rezs = new Array();
	var blocks = new Array();
	blocks = str.split('&');
	if(blocks.length==0){blocks[0] = str;}
	
	for(var i=0; i<blocks.length; i++) {
		rezs = new Array();
		rezs = blocks[i].split('=');
		out[rezs[0]] = rezs[1];
	}
	return out;
}




function handleResponse(callback) { 
	if(http.readyState == 4){
		var response = http.responseText; 
		if(response) { 
			ajaxText = response;
			rezultatai(callback);
		}
	}
}
	
function createRequestObject() { 
	var req; 
	try {
		req=new XMLHttpRequest();  // Firefox, Opera 8.0+, Safari  
	}
	catch (e) {
		try {
			req=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer  
		}
		catch (e){
			try {
				req=new ActiveXObject("Microsoft.XMLHTTP");	  
			}
			catch (e) {
				return false;	  
			}	
		}  
	}
	return req; 
}



// PAPILDOMOS FUNKCIJOS
function emotion(text,oid) {  
    var obj = ge(oid);
    if(document.selection) {  
        obj.focus();  
        var orig = obj.value.replace(/\r\n/g, "\n");  
        var range = document.selection.createRange();  
 
        if(range.parentElement() != obj) {  
            return false;  
        }  
 
        range.text = text;  
          
        var actual = tmp = obj.value.replace(/\r\n/g, "\n");  
 
        for(var diff = 0; diff < orig.length; diff++) {  
            if(orig.charAt(diff) != actual.charAt(diff)) break;  
        }  
 
        for(var index = 0, start = 0;   
            tmp.match(text)   
                && (tmp = tmp.replace(text, ""))   
                && index <= diff;   
            index = start + text.length  
        ) {  
            start = actual.indexOf(text, index);  
        }  
    } else if(obj.selectionStart) {  
        var start = obj.selectionStart;  
        var end   = obj.selectionEnd;  
 
        obj.value = obj.value.substr(0, start)   
            + text   
            + obj.value.substr(end, obj.value.length);  
    }  
      
    if(start != null) {  
        setCaretTo(obj, start + text.length);  
    } else {  
        obj.value += text;  
    }  
}  
 
function setCaretTo(obj, pos) {  
    if(obj.createTextRange) {  
        var range = obj.createTextRange();  
        range.move('character', pos);  
        range.select();  
    } else if(obj.selectionStart) {  
        obj.focus();  
        obj.setSelectionRange(pos, pos);  
    }  
} 
