var national_chars={
"\u0105":"a",
"\u00E4":"a",
"\u0101":"a",
"\u010D":"c",
"\u0119":"e",
"\u0117":"e",
"\u012F":"i",
"\u0173":"u",
"\u016B":"u",
"\u00FC":"u",
"\u017E":"z",
"\u0113":"e",
"\u0123":"g",
"\u012B":"i",
"\u0137":"k",
"\u013C":"l",
"\u0146":"n",
"\u00F6":"o",
"\u00F5":"o",
"\u0161":"s"
};

function toascii(str) {
   var s = str.toLowerCase().split("");
   var s2;

   for (var i=s.length; --i >=0;) {
      if (s2 = national_chars[s[i]]) {
          s[i] = s2;
      }
  }

  return s.join("");
}

function arr_debug(arr) {
    var debug = [];
	for(var i=0; i<arr.length; i++) {
	   debug[i] = i + ":" + arr[i];
	}
	return debug;
}


function text_sort(a, b) {
	if(a == b) return 0;
	else if(a < b) return -1;
	return 1;
}

function MyLocale(_lc_locale, cache) {
	//this._lc_locale = _lc_locale;
	if(cache) this._lc_cache = new Array();
	
	var _lc_native = _lc_locale.split("").sort().join("");
	this._lc_l2n_arr = new Array();
	
	for (var i=0; i < _lc_locale.length; i++) {
		if (_lc_locale.charAt(i) != _lc_native.charAt(i)) {
			this._lc_l2n_arr[_lc_locale.charAt(i)] = _lc_native.charAt(i);
		}
	}
}

MyLocale.prototype.compare = function(a, b) {
	var a_l = this.convert(a);
	var b_l = this.convert(b);

	if (a_l < b_l) {
		return -1;
	} else if (a_l == b_l) {
		return 0;
	} else {
		return 1;
	}
}

MyLocale.prototype.convert = function(str) {
	if (this._lc_cache && this._lc_cache[str]) {
		//console.log("using cache!")
		return this._lc_cache[str];
	} else {
		var out = '';
		for (var i=0; i <= str.length; i++) {
			var c = str.charAt(i);
			if (this._lc_l2n_arr[c]) {
				out += this._lc_l2n_arr[c];
			} else {
				out += c;
			}
		}
		if (this._lc_cache) this._lc_cache[str] = out;
		return out;
	}
} 

var lt_locale = new MyLocale('_0123456789aAąĄbBcCčČdDeEęĘėĖfFgGhHiIįĮjJkKlLmMnNoOpPqQrRsSšŠtTuUųŲūŪvVwWxXyYzZžŽ', true);

function getElementsByClassName(searchClass,node) {
    if(!node) return [];
    if(typeof node.getElementsByClassName != "undefined") {
	    return node.getElementsByClassName(searchClass);
	}
	else {
	    return document.getElementsByClassName(searchClass, node);
	}
}

if (typeof document.getElementsByClassName == "undefined") {
     document.getElementsByClassName = function(searchClass,node,tag) {
        var classElements = new Array();
        if ( node == null )
                node = document;
        if ( tag == null )
                tag = '*';
        var els = node.getElementsByTagName(tag);
        var elsLen = els.length;
        var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
        for (i = 0, j = 0; i < elsLen; i++) {
                if ( pattern.test(els[i].className) ) {
                        classElements[j] = els[i];
                        j++;
                }
        }
        return classElements;
	 }
}


function create_div(id, className, style) {
    var div = document.createElement("div");
	div.className = className;
	div.id = id;
	
	if (style) {
	    for (var key in style) {
	        div.style[key] = style[key];
	    }
	}
	return div;
}


      /*
         method : POST/GET
         url    : Call url
         func   : custom function which is used to process returned data,
                  take only one parameter
      */
      function CDownloadUrl(method, url, func) {
         var httpObj;
         var browser = navigator.appName;
         if(browser.indexOf("Microsoft") > -1)
            httpObj = new ActiveXObject("Microsoft.XMLHTTP");
         else
            httpObj = new XMLHttpRequest();
       
         httpObj.open(method, url, true);
         httpObj.onreadystatechange = function() {
            if(httpObj.readyState == 4){

			if (httpObj.status == 200 || httpObj.status == 0) {
                  var contenttype = httpObj.getResponseHeader('Content-Type');
                  if (contenttype.indexOf('xml')>-1) {
                     func(httpObj.responseXML);
                  } else {
                     func(httpObj.responseText);
                  }
               } else {
                  func('Error: '+httpObj.status);
               }
            }
         };
         httpObj.send(null);
      }
	  
	  
	  	  // IE has no Array.map
if (typeof Array.prototype.map == "undefined") {
    Array.prototype.map = function(fn, thisObj) {
        var scope = thisObj || window;
        var a = [];
        for ( var i=0, j=this.length; i < j; ++i ) {
            a.push(fn.call(scope, this[i], i, this));
        }
        return a;
    };
}

if (typeof Array.prototype.filter == "undefined") {
    Array.prototype.filter = function(fn, thisObj) {
        var scope = thisObj || window;
        var a = [];
        for ( var i=0, j=this.length; i < j; ++i ) {
            if ( !fn.call(scope, this[i], i, this) ) {
                continue;
            }
            a.push(this[i]);
        }
        return a;
    };
}

if (typeof Array.prototype.indexOf == "undefined") {
    Array.prototype.indexOf = function(el, start) {
    var start = start || 0;
    for ( var i=0; i < this.length; ++i ) {
        if ( this[i] === el ) {
            return i;
        }
    }
    return -1;
    };
}

/*
Array.prototype.rstrip = function() {
    for (var i=this.length-1; i>=0; --i) { 
	    if(this[i] != "") { 
		    break;
		} 
		else {
		    this.splice(i,1);
		}
	} 
}
*/

//DEBUG introspection
function intro(obj) {
    property_list = [];
        for (prop in obj) {
           property_list.push(prop);
        }
	property_list.sort();
	
    alert(property_list.join(" - "));
}


function sizeOf(obj) {
   return (function() {var s=0; for(var i in this){s++;} return s;}).call(obj)
}

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); }


function ObjectCopy(obj) {
   var copy = {};
   
   for(var property in obj) {
       var value = obj[property];
       copy[property] = (typeof(value) == "object") ? ObjectCopy(value) : value;
   }

   return copy;
}
   

function ObjectToString(obj) { 
     var rvalue = []; 
	 for(var key in obj) {
	    if(typeof(obj[key]) == "function") { continue; }
	    rvalue.push(key + ":" + obj[key]); 
     }
	 return rvalue.join(";")
}

// Return new array with duplicate values removed
Array.prototype.unique =
  function() {
    var a = [];
    var l = this.length;
    for(var i=0; i<l; i++) {
      for(var j=i+1; j<l; j++) {
        // If this[i] is found later in the array
		if (typeof(this[i]) == "object") {
          if (ObjectToString(this[i]) === ObjectToString(this[j]))
             j = ++i;
	    }
		else {
          if (this[i] === this[j])
             j = ++i;
		}
      }
      a.push(this[i]);
    }
    return a;
  };
  

function hass_class(element, classname) {
	var classes = element.className.split(" ");
	for(var i=0; i<classes.length; i++) {
		if(classes[i] == classname) {
			return true;
		}
	}
	return false;
}
  
function add_class(element, classname) {
	var classes = element.className.split(" ");
	for(var i=0; i<classes.length; i++) {
		if(classes[i] == classname) {
			return;
		}
	}
	classes.push(classname);
	element.className = classes.join(" ");
}  

function remove_class(element, classname) {
	var classes = element.className.split(" ");
	for(var i=0; i<classes.length; i++) {
		if(classes[i] == classname) {
			classes.splice(i, 1);
		}
	}
	element.className = classes.join(" ");
}  

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 "";
}

// this deletes the cookie when called
function deleteCookie(c_name) {
    if (getCookie(c_name)) document.cookie = c_name + "='';expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

function toDay() {
	var today = new Date();
	return Math.floor(today.getTime() / (1000 * 60 * 60 * 24));
}


function format_dirname(str) {
  return str; // estijos " - " bruksniai tvarkyngi
  str_split = str.split("  ");
  if (str_split.length == 1) { // visokiu zhiuriu brksniu buna:)
      return str;
  }
  else {
      return str_split.join("  ");
  }
}

function getInternetExplorerVersion() {
    var rv = -1; // Return value assumes failure.
    if (navigator.appName == 'Microsoft Internet Explorer') {

        var ua = navigator.userAgent;

        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");

        if (re.exec(ua) != null)

            rv = parseFloat(RegExp.$1);

    }
    return rv;
}

function preload(url) {
	var heavyImage = new Image(); 
	heavyImage.src = url;
}
