function EscapeHTML(s){
    s=s.replace(/&/g,'&amp;')
    s=s.replace(/</g,'&lt;')
    s=s.replace(/>/g,'&gt;')
    s=s.replace(/"/g,'&quot;')
    return s
}

function _(id) { return document.getElementById(id); }

function get_url_query(ji){
    hu = window.location.search.substring(1);
    gy = hu.split("&");
    for (i=0;i<gy.length;i++) {
        ft = gy[i].split("=");
        if (ft[0] == ji) {
            return ft[1];
        }
    }
    return '';
}

$.fn.centerAll = function() {
    var scrolltop = $(window).scrollTop()
    var window_width = $(window).width()
    var window_height = $(window).height()
    var obj_width = $(this).width()
    var obj_height = $(this).height()

    $(this).css("position", 'absolute')
    $(this).css("top", (window_height-obj_height)/2 + scrolltop)
    $(this).css("left", (window_width-obj_width)/2 )
}

function show_lang_select() {_("lang").style.display="inline"}
function change_lang() {
    lang = _('lang').value
    url = window.location.toString()
    url = url.replace(/lang=[a-zA-Z_]*/, '')
    if ( url.indexOf('?') >= 0 )
        url = url + '&amp;lang=' + lang
    else
        url = url + '?lang=' + lang

    while ( url.indexOf('&amp;&amp;') >= 0 ) {
        url = url.replace('&amp;&amp;', '&amp;')
    }
    url = url.replace(/\?\&amp;/, '?')
    window.location = url
}

$.fn.centerAll2 = function() {
    var window_width = $(window).width()
    var window_height = $(window).height()
    var obj_width = $(this).width()
    var obj_height = $(this).height()
    $(this).css("position", 'absolute')
    var top = (window_height-obj_height)/2
    if ( top < 0 ) top = 20
    $(this).css("top", top)
    $(this).css("left", (window_width-obj_width)/2 )
}

function LoadApp(url){
    var id = '.DarkLoader'
    $(id).remove()
    var loader = new Object
    var target_id = 'DarkLoader-'+Math.floor(Math.random()*100)
    loader.target_id = target_id
    if(url.indexOf('rand=')<0){
        if(url.indexOf('?')>0){
            url = url + "&rand=" + Math.random()
        } else {
            url = url + "?rand=" + Math.random()
        }
    }
    loader.request_url = url
    loader.cover_image = "http://www.marathon-photos.com/images/cover.png"
    table_html = "<table class='container'>"+
        "<tr><td class='top-left corner'></td>     <td class='top-middle edge'></td>     <td class='top-right corner'></td></tr>"+
        "<tr><td class='main-left edge'></td>    <td class='main-middle'></td>    <td class='main-right edge'></td></tr>"+
        "<tr><td class='bottom-left corner'></td>  <td class='bottom-middle edge'></td>  <td class='bottom-right corner'></td></tr>" + 
        "</table>"

    loader.create = function(){
        var id = '#' + loader.target_id
        $("body").append("<div class='DarkLoader' id='"+loader.target_id+"'></div>")
        $(id).append(table_html)
        $(id+" td.top-right").html("<span class='hoverable clickable close-button'>X</span>")
        $(id+" td.main-middle").html("<img src='/images/progress.gif' width='220px' height='19px'>")
        $(id+" td.top-right span.close-button").click(function(){
            $(window).resize(function(){})
            $("div.DarkLoader").fadeOut(500, function(){
                $("div.DarkLoader").remove()
                })
            })
    }

    loader.adjust = function(){
        var body_width = $(document).width()
        var body_height = $(document).height()
        var window_width = $(window).width()
        var window_height = $(window).height()
        var dark_height = body_height
        if ( window_height > body_height )
            dark_height = window_height
        var dark_width = body_width
        if(window_width > body_width)
            dark_width = window_width
        var id = '#'+loader.target_id
        $(id).css({
            'position': 'absolute',
            'top': '0px',
            'left': '0px',
            'width': dark_width,
            'height': dark_height,
            'background-image': "url("+loader.cover_image+")"
            })
        $(id+" table.container").centerAll2()
    }

    this.run = function(){
        loader.create()
        loader.adjust()
        $(window).resize(function(){
            loader.adjust()
        })
        $.get(loader.request_url, {}, function(data){
            $('#'+loader.target_id+" table.container td.main-middle").html(data)
            $('#'+loader.target_id+" table.container").centerAll2()
            loader.adjust()
        })
    }

    this.run()
}

function DarkLoader3(target_id, url, callback){
    $("div.DarkLoader").remove()
    var loader = new Object
    if (!target_id){
        target_id = 'DarkLoader-'+Math.floor(Math.random()*100)
    }
    loader.target_id = target_id
    loader.request_url = url
    loader.callback = callback
    loader.cover_image = "http://www.marathon-photos.com/images/cover.png"
    table_html = "<table class='container'>"+
        "<tr><td class='top-left corner'></td>     <td class='top-middle edge'></td>     <td class='top-right corner'></td></tr>"+
        "<tr><td class='main-left edge'></td>    <td class='main-middle'></td>    <td class='main-right edge'></td></tr>"+
        "<tr><td class='bottom-left corner'></td>  <td class='bottom-middle edge'></td>  <td class='bottom-right corner'></td></tr>" + 
        "</table>"

    loader.adjust = function(){
        var body_width = $(document).width()
        var body_height = $(document).height()
        var window_width = $(window).width()
        var window_height = $(window).height()
        var dark_height = body_height
        if ( window_height > body_height )
            dark_height = window_height
        var dark_width = body_width
        if(window_width > body_width)
            dark_width = window_width
        var id = '#'+loader.target_id
        if (!document.getElementById(loader.target_id)){
            $("body").append("<div class='DarkLoader' id='"+loader.target_id+"'></div>")
        }
        $(id).css({
            'position': 'absolute',
            'top': '0px',
            'left': '0px',
            'width': dark_width,
            'height': dark_height,
            'background-image': "url("+loader.cover_image+")"
            })
        if($(id).html() == "") {
            $(id).append(table_html)
            $(id+" td.top-right").html("<span class='hoverable close-button'>X</span>")
            $(id+" td.main-middle").html("<img src='/images/progress.gif'>")
            $(id+" td.top-right span.close-button").click(function(){
                $(id).remove()
                })
        }
        $(id+" table.container").centerAll2()
    }

    this.run = function(){
        loader.adjust()
        $(window).resize(function(){
            loader.adjust()
        })
        $.get(loader.request_url, {}, function(data){
            $('#'+loader.target_id+" table.container td.main-middle").html(data)
            $('#'+loader.target_id+" table.container").centerAll2()
            loader.callback()
            loader.adjust()
        })
    }

    this.run()
}

function DarkLoader2(target_id, url, callback){
    var loader = new Object
    if (!target_id){
        target_id = 'DarkLoader-'+Math.floor(Math.random()*100)
    }
    loader.target_id = target_id
    loader.request_url = url
    loader.callback = callback
    loader.cover_image = "http://www.marathon-photos.com/images/cover.png"

    loader.adjust = function(){
        var body_width = $(document).width()
        var body_height = $(document).height()
        var window_width = $(window).width()
        var window_height = $(window).height()
        var dark_height = body_height
        if ( window_height > body_height )
            dark_height = window_height
        var dark_width = body_width
        if(window_width > body_width)
            dark_width = window_width
        var id = '#'+loader.target_id
        if (!document.getElementById(loader.target_id)){
            $("body").append("<div id='"+loader.target_id+"'></div>")
        }
        $(id).css({
            'position': 'absolute',
            'top': '0px',
            'left': '0px',
            'width': dark_width,
            'height': dark_height,
            'background-image': "url("+loader.cover_image+")"
            })
        if($(id).html() == "") {
            $(id).append("<table class='container'><tr><td></td></tr></table>")
        }
        $(id+" table.container").centerAll2()
    }

    this.run = function(){
        loader.adjust()
        $(window).resize(function(){
            loader.adjust()
        })
        $.get(loader.request_url, {}, function(data){
            $('#'+loader.target_id+" table.container td").html(data)
            $('#'+loader.target_id+" table.container").centerAll2()
            loader.callback()
        })
    }

    this.run()
}

function DarkLoader(target_id, url){
    var loader = new Object
    loader.target_id = target_id
    loader.request_url = url
    loader.cover_image = "/images/cover.png"

    loader.adjust = function(){
        var body_width = $(document).width()
        var body_height = $(document).height()
        var window_width = $(window).width()
        var window_height = $(window).height()
        var dark_height = body_height
        if ( window_height > body_height )
            dark_height = window_height
        var dark_width = body_width
        if(window_width > body_width)
            dark_width = window_width
        var id = '#'+loader.target_id
        $(id).css({
            'position': 'absolute',
            'top': '0px',
            'left': '0px',
            'width': dark_width,
            'height': dark_height,
            'background-image': "url("+loader.cover_image+")"
            })
        if($(id).html() == "") {
            $(id).append("<table class='container'><tr><td></td></tr></table>")
        }
        $(id+" table.container").centerAll2()
    }

    this.run = function(){
        loader.adjust()
        $(window).resize(function(){
            loader.adjust()
        })
        $.get(loader.request_url, {}, function(data){
            $('#'+loader.target_id+" table.container td").html(data)
            $('#'+loader.target_id+" table.container").centerAll2()
        })
    }

    this.run()
}

$.fn.image = function(src){ 
    return this.each(function(){ 
        var i = new Image(); 
        i.src = src; 
        this.appendChild(i);
    });
}

function Cookie(){

    var cookie = new Object

    this.set = function(name, value, days){
    	if (days) {
    		var date = new Date();
    		date.setTime(date.getTime()+(days*24*60*60*1000));
    		var expires = "; expires="+date.toGMTString();
    	}
    	else var expires = "";
    	document.cookie = name+"="+value+expires+"; path=/";
    }

    this.get = function(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;

    }

    this.remove = function(name){
	    createCookie(name,"",-1);
    }
}

function show_language_select() {
    _("lang").style.display="inline"; 
}

function change_lang() {
    lang = _('lang').value
    url = window.location.toString()
    url = url.replace(/lang=[a-zA-Z_]*/, '')
    if ( url.indexOf('?') >= 0 )
        url = url + '&lang=' + lang
    else
        url = url + '?lang=' + lang

    while ( url.indexOf('&&') >= 0 ) {
        url = url.replace('&&', '&')
    }
    url = url.replace(/\?\&/, '?')
    window.location = url
}

function toggle(id) {
    obj = document.getElementById(id)
    if( obj.style.display == 'block')
        obj.style.display = 'none'
    else {
        obj.style.display = 'block'
    }
}

function show(id, style){
    if(!style) style='block'
    obj = document.getElementById(id)
    obj.style.display = style
}

function hide(id){
    obj = document.getElementById(id)
    obj.style.display = "none"
}

function find_position(obj) {
    var curleft = curtop = 0
    if (obj.offsetParent) {
        do {    
            curleft += obj.offsetLeft
            curtop += obj.offsetTop
        } while (obj = obj.offsetParent);
    }

    return [curleft, curtop]
}

function gpxdictionary() {
    /*
        associative array

        usage:
            dic = new gpxdictionary()
            dic.set('name', 'sam')  # dic['name'] = 'sam'
            dic.add('sex', 'male') # dic['sex'] = 'male'
            # use set, instead of add
            dic.set('age', '27')

            dic.get('name') # return 'sam'
            dic.remove('age') # now only name, and sex
            dic.length() # return 2
            dic.keys() # return array('name', 'sex')
    */ 
    var dictionary = new Object

    dictionary.table = new Array
    dictionary.keys = new Array

    this.set = function(key, value) {
        dictionary.table[key] = value
        for ( var i=0; i<dictionary.keys.length; i++ ) {
            if ( key == dictionary.keys[i] ) 
                break

            if ( i == (dictionary.keys.length - 1) ) {
                dictionary.keys.push(key)
                dictionary.table.push(value)
                break
            }
        }
        if ( dictionary.keys.length == 0 ) {
            dictionary.keys.push(key)
            dictionary.table.push(value)
        }
    }

    this.add = function(key, value) {
        dictionary.table[key] = value
        dictionary.keys.push(key)
    }
    
    this.get = function(key) {
        return dictionary.table[key]
    }

    this.remove = function(key) {
        newtable = new Array
        newkeys = new Array

        for( var i = 0; i < dictionary.keys.length; i++ ) {
            a_key = dictionary.keys[i]
            if ( a_key == key )
                continue

            newtable[a_key] = dictionary.table[a_key]
            newkeys.push(a_key)
        }

        dictionary.table = newtable
        dictionary.keys = newkeys
    }

    this.length = function() {
        return dictionary.keys.length
    }

    this.keys = function() {
        return dictionary.keys
    }

    this.count = function() {
        /* same as length() */
        return dictionary.keys.length
    }

    this.get_pair_at = function(pos) {
        if ( pos < 1 || pos > dictionary.keys.length ) return 0
        return new Array(dictionary.keys[pos-1], dictionary.table[pos-1])
    }
}

function Translator(){
    var translator = new Object
    translator.dict = new Array
    
    this.add = function(lang, text, translation){
        if (!translator.dict[lang]) {
            translator.dict[lang] = new Array
        }
        translator.dict.push(new Array(text, translation))
    }

    this.get = function(lang, text){
        if(!translator.dict[lang]) return ''
        for(var i=0;i<translator.dict[lang].length;i++){
            var item = translator.dict[lang][i]
            if (item[0] == text)
                return item[1]
        }
        return text
    }
}

function parse_xml_text(text) {
    /*
        usage:
            xml = parse_xml_text(xml_content)
            item = xml.getElementsByTagName('photo')
    */
    var xmlDoc
    try //Internet Explorer
    {
        xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async="false";
        xmlDoc.loadXML(text);
    }
    catch(e)
    {
        try //Firefox, Mozilla, Opera, etc.
        {
            parser=new DOMParser();
            xmlDoc=parser.parseFromString(text,"text/xml");
        }
        catch(e)
        {
            //alert(e.message);
            return xmlDoc;
        }
    }
    return xmlDoc
}

function get_ajax_object() {
    /*
        usage:
            ajax = get_ajax_object()
            ajax.onreadystatechange = function() 
                { ...code dealing the resposne from server ...}
            ajax.open('GET', url, true)
            ajax.send(null)
    */
    var xmlHttp;
    try {
        // Firefox, Opera 8.0+, Safari
        xmlHttp=new XMLHttpRequest();
    } catch (e) {
        // Internet Explorer
        try {
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }  catch (e)  {
                 alert("Your browser does not support AJAX!");
                return false;
            }
        }
    }

    return xmlHttp;
}

function page_recover(){
    $("body #page_on_process").remove()
}

function page_on_process(){
    var loader = new Object
    loader.cover_image = "/images/cover.png"

    loader.adjust = function(){
        var body_width = $(document).width()
        var body_height = $(document).height()
        var window_width = $(window).width()
        var window_height = $(window).height()
        var dark_height = body_height
        if ( window_height > body_height )
            dark_height = window_height
        var dark_width = body_width
        if(window_width > body_width)
            dark_width = window_width
        var id = '#'+loader.target_id
        $(id).css({
            'position': 'absolute',
            'top': '0px',
            'left': '0px',
            'width': dark_width,
            'height': dark_height,
            'background-image': "url("+loader.cover_image+")"
            })
        if($(id).html() == "") {
            $(id).append("<table class='container'><tr><td><img src='/images/progress.gif' width='220px' height='19px'></td></tr></table>")
        }
        $(id+" table.container").centerAll2()
    }

    this.run = function(){
        $("body").append("<div id='page_on_process'></div>")
        loader.target_id = 'page_on_process'
        loader.adjust()
        $(window).resize(function(){
            loader.adjust()
        })
    }

    this.run()
}
