$(function(){
	$('.buttons a, a.button, button.button').addClass('ui-state-default ui-corner-all');
});

function open_window(url, width, height){
 
    var wparams = 'toolbar=0,location=0,directories=0,status=0,menubar=0,';
        wparams += 'scrollbars=0,resizable=0,width='+width+',height='+height;
 
    var win = window.open(url, 'window_name', wparams);
    win.focus();
}

function query_string(query, name, val) {
	var start_pos = query.indexOf(name + '=');
	
	if(start_pos == -1){	//none
		if(val == undefined)
			return '';
		else
			return query + '&' + name + '=' + val;
	} else {
		start_pos += name.length + 1;
		
		var end_pos = query.indexOf('&', start_pos);
		
		if(end_pos == -1){	//last
			if(val == undefined)
				return query.substr(start_pos);
			else
				return query.substr(0, start_pos) + val;
		} else {	//not last
			if(val == undefined)
				return query.substring(start_pos, end_pos);
			else
				return query.substr(0, start_pos) + val + query.substr(end_pos);
		}
	}
}

function is_ipad(){
	if(navigator.userAgent.match(/iPad/i))
		return true;
	else
		return false;
}

function load_image(src, callback){
	var img = new Image();
	$(img).load(function(){
		callback(this);
	});
	img.src = src;
}

$.extend($.expr[":"], {  
    "containsNC": function(elem, i, match, array) {  
        return (elem.textContent || elem.innerText || "").toLowerCase  
().indexOf((match[3] || "").toLowerCase()) >= 0;  
    }  
});  

var loading_img_src = '/images/blackloading.jpg';

function load_lazy(){
	if($('.lazy:visible').length > 0){
		$('.lazy:visible').each(function(){
			if(is_ipad())
				var offset_top = $(this).offset().top - $(document).scrollTop();
			else
				var offset_top = $(this).offset().top;
			
			if($(this).attr('src') == loading_img_src 
				&& offset_top <  $(document).scrollTop() + document.documentElement.clientHeight
				&& offset_top >  $(document).scrollTop() - parseInt($(this).attr('height')))
				$(this).attr('src', $(this).attr('src2'));
		});
	}
}

jQuery.fn.extend({
	lazyload: function(options){
		this.each(function(){
			$(this).attr('src', loading_img_src);
		});

		load_lazy();
		
		$(window).bind('scroll resize', function(){
			load_lazy();
		});
		
		if(is_ipad()){
	        $(document).context.addEventListener('touchend', function(e){ 
				load_lazy();
	        }); 
		}
		
		if(options){
			if(options.trigger){
				$.each(options.trigger, function(name, val){
					eval('$("'+val+'").'+name+'(function(){load_lazy();});');
				});
			}
		}
	},
	load_image: function(callback) {
		var images_counter = this.length;
		
		return this.each(function() { 
			var img = new Image();
			$(img).load(function(){
				images_counter--; 
				
				if(images_counter == 0)
					callback();
			});
			img.src = $(this).attr('src');
		});
	}
});

$.postJSON = function(url, data, callback) {
	$.post(url, data, callback, "json");
};

function number_format (number, decimals, dec_point, thousands_sep) {
    // Formats a number with grouped thousands
    //
    // version: 906.1806
    // discuss at: http://phpjs.org/functions/number_format
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://getsprink.com)
    // +     bugfix by: Benjamin Lupton
    // +     bugfix by: Allan Jensen (http://www.winternet.no)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +     bugfix by: Howard Yeend
    // +    revised by: Luke Smith (http://lucassmith.name)
    // +     bugfix by: Diogo Resende
    // +     bugfix by: Rival
    // +     input by: Kheang Hok Chin (http://www.distantia.ca/)
    // +     improved by: davook
    // +     improved by: Brett Zamir (http://brett-zamir.me)
    // +     input by: Jay Klehr
    // +     improved by: Brett Zamir (http://brett-zamir.me)
    // +     input by: Amir Habibi (http://www.residence-mixte.com/)
    // +     bugfix by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: number_format(1234.56);
    // *     returns 1: '1,235'
    // *     example 2: number_format(1234.56, 2, ',', ' ');
    // *     returns 2: '1 234,56'
    // *     example 3: number_format(1234.5678, 2, '.', '');
    // *     returns 3: '1234.57'
    // *     example 4: number_format(67, 2, ',', '.');
    // *     returns 4: '67,00'
    // *     example 5: number_format(1000);
    // *     returns 5: '1,000'
    // *     example 6: number_format(67.311, 2);
    // *     returns 6: '67.31'
    // *     example 7: number_format(1000.55, 1);
    // *     returns 7: '1,000.6'
    // *     example 8: number_format(67000, 5, ',', '.');
    // *     returns 8: '67.000,00000'
    // *     example 9: number_format(0.9, 0);
    // *     returns 9: '1'
    // *     example 10: number_format('1.20', 2);
    // *     returns 10: '1.20'
    // *     example 11: number_format('1.20', 4);
    // *     returns 11: '1.2000'
    // *     example 12: number_format('1.2000', 3);
    // *     returns 12: '1.200'
    var n = number, prec = decimals;
 
    var toFixedFix = function (n,prec) {
        var k = Math.pow(10,prec);
        return (Math.round(n*k)/k).toString();
    };
 
    n = !isFinite(+n) ? 0 : +n;
    prec = !isFinite(+prec) ? 0 : Math.abs(prec);
    var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
    var dec = (typeof dec_point === 'undefined') ? '.' : dec_point;
 
    var s = (prec > 0) ? toFixedFix(n, prec) : toFixedFix(Math.round(n), prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;
 
    var abs = toFixedFix(Math.abs(n), prec);
    var _, i;
 
    if (abs >= 1000) {
        _ = abs.split(/\D/);
        i = _[0].length % 3 || 3;
 
        _[0] = s.slice(0,i + (n < 0)) +
              _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
        s = _.join(dec);
    } else {
        s = s.replace('.', dec);
    }
 
    var decPos = s.indexOf(dec);
    if (prec >= 1 && decPos !== -1 && (s.length-decPos-1) < prec) {
        s += new Array(prec-(s.length-decPos-1)).join(0)+'0';
    }
    else if (prec >= 1 && decPos === -1) {
        s += dec+new Array(prec).join(0)+'0';
    }
    return s;
}

function quotes_to_entities(str){
	str = str.replace("'", '&#39;');
	str = str.replace('"', '&quot;');
	
	return str;
}

function redirect(url, target)
{
	if(!target)
		location.href = url;
	else
		target.location.href = url;
}

function textdate2date(textdate) {
	if(typeof(textdate) != 'string')
		textdate = textdate.toString();
	
	var myDate=new Date();
	myDate.setFullYear(textdate.substr(0, 4), textdate.substr(4,2)-1, textdate.substr(6,2));
	
	return myDate;
}

function days_between(date1, date2) {

    // The number of milliseconds in one day
    var ONE_DAY = 1000 * 60 * 60 * 24

    // Convert both dates to milliseconds
    var date1_ms = date1.getTime()
    var date2_ms = date2.getTime()

    // Calculate the difference in milliseconds
    var difference_ms = Math.abs(date1_ms - date2_ms)
    
    // Convert back to days and return
    return Math.round(difference_ms/ONE_DAY)

}
