var debug = false;
if (!window.console) debug = false;
var dirAllowed = true;


var warningFlag = true;
var warningTimer;



function calendarDateSelection(date, object) {
	$('#calendar_data_date').val(date);
	ajaxEventsRetrieve(date, 0, false, true);
}

function buildUrl(paramsObject) {
	if (typeof paramsObject == 'object') {
		if (getObjectSize(paramsObject) == 2 && array_key_exists('id', paramsObject) && array_key_exists('lang', paramsObject)) {
			var url = WEBPATH;
			if (paramsObject['lang'] != ITALIAN_LANGUAGE) url += '/' + paramsObject['lang'];
			url += '/' + paramsObject['id'];
			return url;
		}
		return WEBPATH + '/index.php?' + http_build_query(paramsObject);
	}
	return WEBPATH;
}

/*
function dopost(params) {
	//console.dir(params);

	var form;
	var input;
	var matches;

	if (getObjectSize(params) > 0) {

		form = $('<form>');
		form.attr('method', 'POST');
		form.attr('action', buildUrl({ 'id': 2, 'lang': params['lang'], 'back': params['back'] }));

		$.each(params, function(name, value) {

			if (!name.match(/^(id|lang|back|filters_value[0-9]+)$/)) {
				matches = name.match(/^filters_key([0-9]+)$/);

				if (matches) {
					name = 'filters[' + value + ']';
					value = params['filters_value' + matches[1]];
				}

				input = $('<input>');
				input.attr('type', 'hidden');
				input.attr('name', name);
				input.attr('value', value);

				form.append(input);

				//console.log(name + ' = ' + value);
			}
		});

		form.appendTo('body');
        form.submit();
	}

	return false;
}
*/




function _buildPagerArray(firstItem, pagerSize, itemCount, mobileWindowSize, spacer) {
	if (mobileWindowSize % 2 == 0) mobileWindowSize++;

	var pagesCount = Math.ceil(itemCount / pagerSize);
	var currentPage = Math.ceil(firstItem / pagerSize);
	var mobileWindowStartPage	= currentPage - Math.floor(mobileWindowSize / 2);
	var mobileWindowEndPage		= mobileWindowStartPage + mobileWindowSize - 1;

	var pagerArray = new Array;
	var prevFlag;
	var currentFlag = true;

	for (i = 1; i <= pagesCount; i++) {
		prevFlag = currentFlag;

		if (i == 1 || (i >= mobileWindowStartPage && i <= mobileWindowEndPage) || i == pagesCount) {
			currentFlag = true;
			pagerArray.push(i);
		} else {
			currentFlag = false;
			if (currentFlag != prevFlag) pagerArray.push(spacer);
		}
	}

	return pagerArray;
}

function displayPager(firstItem, pagerSize, itemCount, mobileWindowSize, spacer) {
	firstItem			= parseInt(firstItem);
	pagerSize			= parseInt(pagerSize);
	itemCount			= parseInt(itemCount);
	mobileWindowSize	= parseInt(mobileWindowSize);

	if (itemCount > pagerSize) {
		var pagerArray = _buildPagerArray(firstItem, pagerSize, itemCount, mobileWindowSize, spacer);

		var pager = $('<div>');
		pager.attr('class', 'pager');

		var ul = $('<ul>');
		var li;
		var a;
		var span;

		var value;
		var currentFirstItem;

		for (i in pagerArray) {
			value = pagerArray[i];
			currentFirstItem = parseInt((value - 1) * pagerSize);

			li = $('<li>');
			if (!isNaN(value)) {
				a = $('<a>');
				a.addClass('raiseSearch');
				if (firstItem == currentFirstItem  + 1) a.addClass('attivo');
				a.attr('href', '#');
				a.text(value);

				span = $('<span>');
				span.addClass('hidden');
				span.text('firstItem:' + currentFirstItem);

				li.append(a);
				li.append(span);
			} else li.text(value);

			ul.append(li);
		}

		pager.append(ul);

		var lastItem = firstItem - 1 + pagerSize;
		if (lastItem > itemCount) lastItem = itemCount;

		var p = $('<p>');
		var risultatiText = translatedRisultati;
		risultatiText = risultatiText.replace('(0)', firstItem);
		risultatiText = risultatiText.replace('(1)', lastItem);
		risultatiText = risultatiText.replace('(2)', itemCount);
		p.html(risultatiText);

		pager.append(p);

		return pager;
	}

	return false;
}



function getObjectSize(object) {
	var count = 0;
	for (i in object) count++;
	return count;
}

function fixValue(val, regexp) {
	val = val.replace(regexp, '');
	return val;
}

function jsConfirm() {
	return confirm(translatedConfirm + '?');
}



function setSession(key, value) {
	$.ajax({
		type:'POST',
		url:'/index.php',
		data:'ajax=setsession&key=' + key + '&value=' + value,
		asyn:false
	});
}



function rawurlencode(str) {
    // http://kevin.vanzonneveld.net
    // +   original by: Brett Zamir (http://brett-zamir.me)
    // +      input by: travc
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Michael Grier
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
    // +      input by: Ratheous
    // +      reimplemented by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Joris
    // +      reimplemented by: Brett Zamir (http://brett-zamir.me)
    // %          note 1: This reflects PHP 5.3/6.0+ behavior
    // %        note 2: Please be aware that this function expects to encode into UTF-8 encoded strings, as found on
    // %        note 2: pages served as UTF-8
    // *     example 1: rawurlencode('Kevin van Zonneveld!');
    // *     returns 1: 'Kevin%20van%20Zonneveld%21'
    // *     example 2: rawurlencode('http://kevin.vanzonneveld.net/');
    // *     returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F'
    // *     example 3: rawurlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a');
    // *     returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a'

    str = (str+'').toString();

    // Tilde should be allowed unescaped in future versions of PHP (as reflected below), but if you want to reflect current
    // PHP behavior, you would need to add ".replace(/~/g, '%7E');" to the following.
    return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A');
}

function rawurldecode(str) {
    // http://kevin.vanzonneveld.net
    // +   original by: Brett Zamir (http://brett-zamir.me)
    // +      input by: travc
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Ratheous
    // +      reimplemented by: Brett Zamir (http://brett-zamir.me)
    // %        note 1: Please be aware that this function expects to decode from UTF-8 encoded strings, as found on
    // %        note 1: pages served as UTF-8
    // *     example 1: rawurldecode('Kevin+van+Zonneveld%21');
    // *     returns 1: 'Kevin+van+Zonneveld!'
    // *     example 2: rawurldecode('http%3A%2F%2Fkevin.vanzonneveld.net%2F');
    // *     returns 2: 'http://kevin.vanzonneveld.net/'
    // *     example 3: rawurldecode('http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a');
    // *     returns 3: 'http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a'
    // *     example 4: rawurldecode('-22%97bc%2Fbc');
    // *     returns 4: '-22—bc/bc'

    return decodeURIComponent(str);
}

function array_key_exists(key, search) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Felix Geisendoerfer (http://www.debuggable.com/felix)
    // *     example 1: array_key_exists('kevin', {'kevin': 'van Zonneveld'});
    // *     returns 1: true

    // input sanitation
    if (!search || (search.constructor !== Array && search.constructor !== Object)){
        return false;
    }

    return key in search;
}

function http_build_query (formdata, numeric_prefix, arg_separator) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Legaev Andrey
    // +   improved by: Michael White (http://getsprink.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +    revised by: stag019
    // -    depends on: urlencode
    // *     example 1: http_build_query({foo: 'bar', php: 'hypertext processor', baz: 'boom', cow: 'milk'}, '', '&amp;');
    // *     returns 1: 'foo=bar&amp;php=hypertext+processor&amp;baz=boom&amp;cow=milk'
    // *     example 2: http_build_query({'php': 'hypertext processor', 0: 'foo', 1: 'bar', 2: 'baz', 3: 'boom', 'cow': 'milk'}, 'myvar_');
    // *     returns 2: 'php=hypertext+processor&myvar_0=foo&myvar_1=bar&myvar_2=baz&myvar_3=boom&cow=milk'

    var value, key, tmp = [];

    var _http_build_query_helper = function (key, val, arg_separator) {
        var k, tmp = [];
        if (val === true) {
            val = "1";
        } else if (val === false) {
            val = "0";
        }
        if (val !== null && typeof(val) === "object") {
            for (k in val) {
                if (val[k] !== null) {
                    tmp.push(_http_build_query_helper(key + "[" + k + "]", val[k], arg_separator));
                }
            }
            return tmp.join(arg_separator);
        } else if (typeof(val) !== "function") {
            return this.rawurlencode(key) + "=" + this.rawurlencode(val);
        } else {
            throw new Error('There was an error processing for http_build_query().');
        }
    };

    if (!arg_separator) {
        arg_separator = "&";
    }
    for (key in formdata) {
        value = formdata[key];
        if (numeric_prefix && !isNaN(key)) {
            key = String(numeric_prefix) + key;
        }
        tmp.push(_http_build_query_helper(key, value, arg_separator));
    }

    return tmp.join(arg_separator);
}

function quote(string) {
	//string = string.replace(/(['])/g, "\\$1").replace(/\u0000/g, "\\0");
	string = rawurlencode(string);
	return string;
}





function showWarning(text, callback, callbackParam) {
	var p = $('<p>');
	p.addClass('warning');
	p.attr('data-corner', '10px');
	p.html(text);

	$('#funzioni_ar').after(p);

	$('.warning').corner();
	signinTimer = setTimeout(function(){
		$('.warning').slideUp('slow', function(){
			if (callback != false) callback(callbackParam);
		});
	}, 5000);
}

function warningEnd(removeWarning) {
	if (removeWarning) $('.warning').remove();
	warningFlag = true;
}





$.fn.outerHTML = function() {
    var doc = this[0] ? this[0].ownerDocument : document;
    return $('<div>', doc).append(this.eq(0).clone()).html();
};


