/**
*  Javascript sprintf
*  http://www.webtoolkit.info/
**/
var sprintfWrapper = {

    init : function () {

        if (typeof arguments == "undefined") { return null; }
        if (arguments.length < 1) { return null; }
        if (typeof arguments[0] != "string") { return null; }
        if (typeof RegExp == "undefined") { return null; }

        var string = arguments[0];
        var exp = new RegExp(/(%([%]|(\-)?(\+|\x20)?(0)?(\d+)?(\.(\d)?)?([bcdfosxX])))/g);
        var matches = new Array();
        var strings = new Array();
        var convCount = 0;
        var stringPosStart = 0;
        var stringPosEnd = 0;
        var matchPosEnd = 0;
        var newString = '';
        var match = null;

        while (match = exp.exec(string)) {
            if (match[9]) { convCount += 1; }

            stringPosStart = matchPosEnd;
            stringPosEnd = exp.lastIndex - match[0].length;
            strings[strings.length] = string.substring(stringPosStart, stringPosEnd);

            matchPosEnd = exp.lastIndex;
            matches[matches.length] = {
                match: match[0],
                left: match[3] ? true : false,
                sign: match[4] || '',
                pad: match[5] || ' ',
                min: match[6] || 0,
                precision: match[8],
                code: match[9] || '%',
                negative: parseInt(arguments[convCount]) < 0 ? true : false,
                argument: String(arguments[convCount])
            };
        }
        strings[strings.length] = string.substring(matchPosEnd);

        if (matches.length == 0) { return string; }
        if ((arguments.length - 1) < convCount) { return null; }

        var code = null;
        var match = null;
        var i = null;

        for (i=0; i<matches.length; i++) {

            if (matches[i].code == '%') { substitution = '%' }
            else if (matches[i].code == 'b') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(2));
                substitution = sprintfWrapper.convert(matches[i], true);
            }
            else if (matches[i].code == 'c') {
                matches[i].argument = String(String.fromCharCode(parseInt(Math.abs(parseInt(matches[i].argument)))));
                substitution = sprintfWrapper.convert(matches[i], true);
            }
            else if (matches[i].code == 'd') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)));
                substitution = sprintfWrapper.convert(matches[i]);
            }
            else if (matches[i].code == 'f') {
                matches[i].argument = String(Math.abs(parseFloat(matches[i].argument)).toFixed(matches[i].precision ? matches[i].precision : 6));
                substitution = sprintfWrapper.convert(matches[i]);
            }
            else if (matches[i].code == 'o') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(8));
                substitution = sprintfWrapper.convert(matches[i]);
            }
            else if (matches[i].code == 's') {
                matches[i].argument = matches[i].argument.substring(0, matches[i].precision ? matches[i].precision : matches[i].argument.length)
                substitution = sprintfWrapper.convert(matches[i], true);
            }
            else if (matches[i].code == 'x') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
                substitution = sprintfWrapper.convert(matches[i]);
            }
            else if (matches[i].code == 'X') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
                substitution = sprintfWrapper.convert(matches[i]).toUpperCase();
            }
            else {
                substitution = matches[i].match;
            }

            newString += strings[i];
            newString += substitution;

        }
        newString += strings[i];

        return newString;

    },

    convert : function(match, nosign){
        if (nosign) {
            match.sign = '';
        } else {
            match.sign = match.negative ? '-' : match.sign;
        }
        var l = match.min - match.argument.length + 1 - match.sign.length;
        var pad = new Array(l < 0 ? 0 : l).join(match.pad);
        if (!match.left) {
            if (match.pad == "0" || nosign) {
                return match.sign + pad + match.argument;
            } else {
                return pad + match.sign + match.argument;
            }
        } else {
            if (match.pad == "0" || nosign) {
                return match.sign + match.argument + pad.replace(/0/g, ' ');
            } else {
                return match.sign + match.argument + pad;
            }
        }
    }
}

var sprintf = sprintfWrapper.init;




/**
 * Dresden javascript by gizmore
 * (c)2011 Stephan Schmied
 */

function ddChangeYear(catloc, year, baseurl)
{
	window.location.href='/'+baseurl+'/'+catloc+year;
}

function ddChangeMonth(catloc, year, month, baseurl)
{
	if (month==0) {
		window.location.href='/'+baseurl+'/'+catloc+year;
	}
	else {
		window.location.href='/'+baseurl+'/'+catloc+year+'-'+month;
	}
}

function ddClickDay(catloc, year, month, day, baseurl)
{
	window.location.href='/'+baseurl+'/'+catloc+year+'-'+month+'-'+day;
}

function ddGetDateURL(year, month, day)
{
	if (year === 0) {
		return "";
	}
	else if (month === 0) {
		return sprintf('/%04d', year);
	}
	else if (day === 0) {
		return sprintf('/%04d-%02d', year, month);
	}
	else {
		return sprintf('/%04d-%02d-%02d', year, month, day);
	}
}

function ddChangeLoc(sel, year, month, day, baseurl)
{
	var s = sel.selectedIndex;
	var opt = sel.options[s];
	var id = opt.value;
	var text = opt.text;
	var date = ddGetDateURL(year, month, day);
	if (id == 0) {
		var ort = "";
	} else {
		var ort = sprintf('/ort-%s-%s', id, text);
	}
	var url = sprintf('/%s%s%s', baseurl, ort, date);
	window.location.href = url;
}

function ddChangeCat(sel, year, month, day, baseurl)
{
	var s = sel.selectedIndex;
	var opt = sel.options[s];
	var id = opt.value;
	var text = opt.text;
	var date = ddGetDateURL(year, month, day);
	if (id == 0) {
		var cat = "";
	} else {
		var cat = sprintf('/cat-%s-%s', id, text);
	}
	var url = sprintf('/%s%s%s', baseurl, cat, date);
	window.location.href = url;
}

