var timezoneDiff;

$(document).ready(function(){
	$jScroller.add("#scrollerContainer", "#scroller", "left", 1);
	$jScroller.start();
	
	var timeLeft = $('#timeLeft');
	if (timeLeft.size() > 0){
		timezoneDiff = (new Date()).getTime() - $('#currentTimestamp').attr('value')*1000;
		var deadlineTime = $('#deadlineVal').attr('value')*1000;  //javascript uses miliseconds instead of seconds
		printTimeLeft(deadlineTime);
		setInterval(function(){printTimeLeft(deadlineTime);},1000); //1 second
	}

	$('.showHelpTooltip').mouseover(function(e){
		// ukrywam wszystkie info
		$('.helpTooltipDiv').hide();
		
		// pobieram dane i dziele przez | (id|top)
		var dane = $(this).attr('alt').split('|');
		
		// pobieram pozycje kursora
		var mouseX = e.pageX;
		var mouseY = e.pageY;

		// ustawiam diva i go wlaczam
		var tooltip = $('#tooltip' + dane[0]);
		var height = tooltip.height();
		var top = dane[1];
		top = mouseY - 220 - height;
		var left = mouseX - 15;
		if(jQuery.browser.msie && jQuery.browser.version == 6){
			top -= 20;
			left = 300;
		}
		tooltip.css('left', left + 'px').
				css('top', top + 'px').
				fadeIn();
		
		$(this).mouseout(function(){
			$('#tooltip' + dane[0]).hide();
		});
		
	});
	
	
	
	$('.charts').click(function(){
		f_switchOn($(this));
		f_switchOff($('.rawResults'));
//		$(this).attr('src', 'gfx/chartOn.png');
//		$('.rawResults').attr('src', 'gfx/rawResultsOff.png');
		$('.rawResultsDiv').hide();
		$('.chartsDiv').fadeIn();
	});
	
	$('.rawResults').click(function(){
		f_switchOn($(this));
		f_switchOff($('.charts'));
//		$(this).attr('src', 'gfx/rawResultsOn.png');
//		$('.charts').attr('src', 'gfx/chartOff.png');
		$('.chartsDiv').hide();
		$('.rawResultsDiv').fadeIn();
	});
 
    /////////////////////////////////////////////////////////////////////////////////////////////
	// autocomplete resource access rights in Repository
	/////////////////////////////////////////////////////////////////////////////////////////////	

		$('.autoAccess').autocomplete(["private", "public"], {
			width: 0,
			minChars: 0,
			matchContains: true,
			scrollHeight: 240,
			formatItem: function(row) { return row[0]; },
			formatMatch: function(row) {
				return row[0] + "|privatepublic";
			},
			formatResult: function(row)	{
				return row[0].split("|")[0]; 
			}
		});
		
		$('.autoAccessRest').autocomplete(["private", "public", "restricted"], {
			width: 0,
			minChars: 0,
			scrollHeight: 240,
			matchContains: true,
			formatItem: function(row) { return row[0]; },
			formatMatch: function(row) {
				return row[0] + "|privatepublicrestricted";
			},
			formatResult: function(row)	{
				return row[0].split("|")[0]; 
			}
		});
		
	/////////////////////////////////////////////////////////////////////////////////////////////
	// autocomplete kraje - lista powinna byc zgodna z zawartoscia bazy danych
	/////////////////////////////////////////////////////////////////////////////////////////////	

		$('.autoCountries, #profileCountries').autocomplete(
		// list below must exactly match the contents of 'fa_country' table in DB
				["Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra", "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina", "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan", "Bahamas", "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium", "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia", "Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil", "British Indian Ocean Territory", "Brunei Darussalam", "Bulgaria", "Burkina Faso", "Burundi", "Cambodia", "Cameroon", "Canada", "Cape Verde", "Cayman Islands", "Central African Republic", "Chad", "Chile", "China", "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo", "Congo, the Democratic Republic of the", "Cook Islands", "Costa Rica", "Cote D'Ivoire", "Croatia", "Cuba", "Cyprus", "Czech Republic", "Denmark", "Djibouti", "Dominica", "Dominican Republic", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia", "Falkland Islands (Malvinas)", "Faroe Islands", "Fiji", "Finland", "France", "French Guiana", "French Polynesia", "French Southern Territories", "Gabon", "Gambia", "Georgia", "Germany", "Ghana", "Gibraltar", "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau", "Guyana", "Haiti", "Heard Island and Mcdonald Islands", "Holy See (Vatican City State)", "Honduras", "Hong Kong", "Hungary", "Iceland", "India", "Indonesia", "Iran, Islamic Republic of", "Iraq", "Ireland", "Israel", "Italy", "Jamaica", "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Korea, Democratic People's Republic of", "Korea, Republic of", "Kuwait", "Kyrgyzstan", "Lao People's Democratic Republic", "Latvia", "Lebanon", "Lesotho", "Liberia", "Libyan Arab Jamahiriya", "Liechtenstein", "Lithuania", "Luxembourg", "Macao", "Macedonia, the Former Yugoslav Republic of", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands", "Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia, Federated States of", "Moldova, Republic of", "Monaco", "Mongolia", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia", "Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand", "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "Northern Mariana Islands", "Norway", "Oman", "Pakistan", "Palau", "Palestinian Territory, Occupied", "Panama", "Papua New Guinea", "Paraguay", "Peru", "Philippines", "Pitcairn", "Poland", "Portugal", "Puerto Rico", "Qatar", "Reunion", "Romania", "Russian Federation", "Rwanda", "Saint Helena", "Saint Kitts and Nevis", "Saint Lucia", "Saint Pierre and Miquelon", "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Sao Tome and Principe", "Saudi Arabia", "Senegal", "Serbia and Montenegro", "Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands", "Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "Spain", "Sri Lanka", "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden", "Switzerland", "Syrian Arab Republic", "Taiwan, Province of China", "Tajikistan", "Tanzania, United Republic of", "Thailand", "Timor-Leste", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey", "Turkmenistan", "Turks and Caicos Islands", "Tuvalu", "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan", "Vanuatu", "Venezuela", "Viet Nam", "Virgin Islands, British", "Virgin Islands, U.s.", "Wallis and Futuna", "Western Sahara", "Yemen", "Zambia", "Zimbabwe"],
				{width: 0,
				minChars: 0,
				scrollHeight: 240,
				multipleSeparator: "; ",
				max: 239,
				formatItem: function(row) { return row[0]; }
		});
		
	$('.toggleButton').click(function(){
		var src = $('img', $(this)).attr('src');
		var id = $(this).attr('id');
		var div = $("#" + id + "Div");
		if(div.css('display') == 'none')
		{
			div.fadeIn();
			src = src.replace(/DownOff.png$/, "UpOff.png");
			$('img', this).attr('src', src);
		}
		else
		{
			div.hide();
			src = src.replace(/UpOff.png$/, "DownOff.png");
			$('img', this).attr('src', src);	
		}
		return false;
	});
	
	$('.newFolderFile').click(function(){
		var params = $(this).val().split("_");
		$('#uForm').attr('action', params[1]);
		if(params[0] == 'file'){
			$('#nameLabel').attr('innerHTML', 'File name');
			$('.repositoryButtonUpload').removeClass('repositoryButtonCreate');
			$('#destinationFolder').fadeIn();
			$('#ownerRow').hide();
		}else{
			$('#nameLabel').attr('innerHTML', 'Subfolder name');
			$('.repositoryButtonUpload').addClass('repositoryButtonCreate');
			$('#destinationFolder').hide();
			$('#ownerRow').fadeIn();
		}
		$('.hiddenDiv').hide();
		$('#' + params[0]).fadeIn();
	});	
	 
	$.each(['#inputA', '#inputE', '#inputD', '#inputN'], function(index, val){
		$(val).autocomplete($(val).attr('alt'), {
			width: 0,
			minChars: 0,
			scrollHeight: 240,
			max: 239,
			multiple: true, 
			multipleSeparator: " ",
			mustMatch: false,
			selectFirst: false,
			formatItem: function(row) { return row[0]; }
		});
	});
	
	$('.knowledgeShowResults').click(function(){
		var url = $('#filtersForm').attr('action') + "?";
		$('#filtersForm input[value!=][type=text]').each(function(index){
			var parts = $(this).val().replace(/\s+/g, " ").replace(/(^\s|\s$)/, "").split(" ");
			url += $(this).attr('name') + "=" + parts.join('+') + "&";
		});
		if($('#exact').attr('checked'))
			url += "exact=on";
		else
			url = url.substr(0, url.length - 1);
		location.replace(url);
		return false;
	});
	
	$('#challengeAddNews').click(function(){
		$('#addNewsDiv').fadeIn();
		$(this).hide();
	});
	
	$('#challengeAddNewsCancel').click(function(){
		$('#addNewsDiv').hide();
		$('#challengeAddNews').fadeIn();
		return false;
	});
	
	$('#subMaxCheck').click(function(){
		if($(this).attr('checked'))
			$("#subMaxText").attr('disabled', false);
		else
			$("#subMaxText").attr('disabled', true);
	});	
	
	$(".mailUs").each(function(i, el){
		var txt = $(el).html();
		txt = txt.replace(" (at) ", "@");
		$(el).html('<a href="mailto:' + txt + '">' + txt + '</a>');
	});
	
	var activeTimer;
	var timers = new Object();
	var delay = 300;
	
	$(".headerMenu li:not(.activeMenu):not(.inactiveMenu)").bind("mouseleave", function(){
		var id = $(this).css('background-color', '').attr('id');
		
		activeTimer = setTimeout('$(".activeMenu").css("background-color", "");$(".activeMenu > div").show()', 10);
		if(timers[id]){
			clearTimeout(timers[id]);
			timers[id] = null;
		}
		if(id != '')
			$('#' + id + ' > div').hide();
	}).mouseover(function(){
		var id = $(this).css('background-color', '#D9D9D9').attr('id');
		$(".activeMenu").css("background-color", "transparent");
		if(activeTimer)
		{
			clearTimeout(activeTimer);
			activeTimer = null;
		}
		$(".activeMenu > div").hide();
		if(id != '')
		{
			if(timers[id]){
				clearTimeout(timers[id]);
			}
			timers[id] = setTimeout("$('#" + id + " > div').show()", delay);
		}
	});
	
	if($(".prettyprint").length > 0)
		prettyPrint();
	
	var baseUrl = $('.footerStats').attr('alt');
	if(baseUrl != undefined)
		$.getJSON(baseUrl + "ajax/stats", function(data){
			var html = 'STATS: <a href="' + baseUrl + 'auth/register">' + data.users + ' users</a>, <a href="' + baseUrl + 'repo">' + data.data + ' datasets</a>, ';
			html += '<a href="' + baseUrl + 'repo">' + data.algs + ' algorithms</a>, <a href="' + baseUrl + 'results">' + data.aggregated + ' aggregated results</a>, ';
			html += '<a href="' + baseUrl + 'results">' + data.atomic + ' atomic results</a>, <a href="' + baseUrl + 'challenges">' + data.challenges + ' challenges</a>';
			$('.footerStats').append(html);
		});
	
	if($('#homeTop').length > 0)
		startHomeRotator();
	$('#homeTop, .homeBoxButton').mouseover(stopHomeRotator).mouseout(startHomeRotator);
	$('.homeBoxButton a').focus(function(){
		$(this).blur();
	});
	
	if($('#servicesFileCheck').attr('checked') == 1)
		$('#servicesTextDiv').hide();
	else
		$('#servicesFileDiv').hide();

	$('#servicesFileCheck').click(function(){
		$('#servicesTextDiv').hide();
		$('#servicesFileDiv').fadeIn();
	});
	
	$('#servicesTextCheck').click(function(){
		$('#servicesFileDiv').hide();
		$('#servicesTextDiv').fadeIn();
	});
});

$(window).load(function() {
	$(".showHint").each(function(i){
		f_updateHint(this.id);
	});
});

	function printTimeLeft(deadlineTime){
		var second = 1000;
		var minute = second * 60;
		var hour = minute * 60;
		var day = hour * 24;
	  
		var localDate = new Date();
		var currentTime = localDate.getTime() - timezoneDiff; //current UTC time
	  
		var daysLeft = 0;
		var hoursLeft = 0;
		var minutesLeft = 0;
		var secondsLeft = 0;
		var diff = deadlineTime - currentTime;
		if (diff > 0){
			var daysLeft = Math.floor(diff / day);
			var hoursLeft = Math.floor((diff - daysLeft*day) / hour);
			var minutesLeft = Math.floor((diff - daysLeft*day - hoursLeft*hour) / minute);
			var secondsLeft = Math.floor((diff - daysLeft*day - hoursLeft*hour - minutesLeft*minute) / second);
		}
		
		var hoursLeftStr = (hoursLeft < 10) ? "0"+hoursLeft : hoursLeft;
		var minutesLeftStr = (minutesLeft < 10) ? "0"+minutesLeft : minutesLeft;
		var secondsLeftStr = (secondsLeft < 10) ? "0"+secondsLeft : secondsLeft;
		   
		var display = "";
		if (daysLeft > 0) {
			display += daysLeft;
			if (daysLeft == 1) display += " day ";
			else display += " days ";
		}
		display += hoursLeftStr + ":" + minutesLeftStr + ":" + secondsLeftStr;
		// Update the time display
		document.getElementById("timeLeft").firstChild.nodeValue = display;
	}

	function f_switchOn(object)
	{
		var src = object.attr('src');
		src = src.replace(/Off.png$/, "On.png");
		object.attr('src', src);
	}
	
	function f_switchOff(object)
	{
		var src = object.attr('src');
		src = src.replace(/On.png$/, "Off.png");
		object.attr('src', src);
	}

	function f_fakeInput(object)
	{
		document.getElementById('fakeInput').value = object.value;
	}

	function f_fakeInput(object, no)
	{
		//JavaScript nie ma przeciążania funkcji, więc tutaj musimy się uporać z brakiem drugiego argumentu
		if(no == undefined)
			no = "";
		$('#fakeInput' + no).attr('value', object.value).css('color', '#000');
	}
	
	function f_removeHint(obj, hint)
	{
		if(obj.value == hint)
			obj.value = '';
		obj.style.color = '#000';
	}
	function f_addHint(obj, hint)
	{
		if(obj.value == '') {
			obj.value = hint;
			obj.style.color = '#808080';
		}
	}
	
	function f_showHint(input)
	{
		if(input.value != '')
			return false;
		var hint = $("#" + input.id + "_hint");
		hint.css('visibility', 'visible');
	}
	function f_focusOnInput(inputId)
	{
		var input = $("#" + inputId);
		var hint = $("#" + inputId + "_hint");
		hint.css('visibility', 'hidden');
		input.focus();
	}
	function f_updateHint(inputId)
	{
		var input = $("#" + inputId);
		var hint = $("#" + inputId + "_hint");
		if((input.val() == null) || (input.val() == ''))
			hint.css('visibility', 'visible');
		else
			hint.css('visibility', 'hidden');
	}
	
	function f_submit(check, formId)
	{
		var form = $('#' + formId).submit();
	}
	
	function subMaxCheck(val)
	{
		if(!$('#subMaxCheck').attr('checked')){
			if(val != 0)
				$('#subMaxText').val("0").change();
			else
				$("#subMaxText").attr('disabled', true);
		}else
			$("#subMaxText").attr('disabled', false);
	}
	
	function f_submitOnChange(formId)
	{
		$('#' + formId).submit();
	}

	function changeName(action, oldFullname, oldName)
	{
		var fields = '<div style="padding:5px 5px 5px 5px;">Insert new file name</div>'
					+ '<div style="padding:5px 5px 5px 5px;"><input type="hidden" name="r" value="' + oldFullname + '"/><input type="text" name="n" value="' + oldName + '"/></div>';
		formPopUp(action, "Change file name", fields);
	}
	
	function newsDate(id, date, url)
	{
		var fields = '<tr><td colspan="2">Insert new date (YYYY-MM-DD HH:MM:SS)</td></tr>'
				+ '<tr><td colspan="2"><input type="hidden" name="id" value="' + id + '"/><input type="text" name="t" value="' + date + '"/></td></tr>';
		formPopUp(url + '?c=news&m=date', "Change date", fields);
	}
	
	function onMainNewsSelect(title, text)
	{
		$('#mainTitle').html(Url.decode(title));
		$('#mainText').html(Url.decode(text));
	}
	
	function cancelMainNewsSelect(title, text, id)
	{
		$('#mainTitle').html(Url.decode(title));
		$('#mainText').html(Url.decode(text));
		$('#opt' + id).attr('selected', 'SELECTED');
		$('#mainNews').click();
		return false;
	}
	
	function hidePopup()
	{
		$('#popUpBg').remove();
		$('#mainPopUp').remove();
	}
	
	function wrapText(some_text,howmanych)
	{
		var nr_words_in_line=howmanych;
		var return_text='';
		var warp_now=false;
		
		for(var a=0;some_text[a];a++)
		{
			if((warp_now==true)&& some_text[a].match(/\s/))
			{
				return_text+='<br />';
				warp_now=false;
			}
			if((((a%nr_words_in_line)==0)&&a>0)&&(warp_now==false))
				warp_now=true;
			return_text+=some_text[a];
		}
		return return_text;
	}
	
	function formPopUp(action, title, fieldsHTML)
	{
		var form = '<form method="POST" action="' + action + '">';
		form += '<div style="width:100%;overflow:auto;">';
		form += fieldsHTML;
		form += '<div style="width:100%;overflow:auto;padding:10px 0px 10px 0px;"><div style="width:50%;text-align:right;float:left;"><input type="submit" class="popUpButtonChange" value="" style="margin-right:10px;" /></div>'
	        + '<div style="width:50%;text-align:left;float:left;"><input type="submit" class="popUpButtonCancel" value="" onclick="hidePopup(); return false;" style="margin-left:10px;" /></div></div>'
	      	+ '</div></form>';
		rawPopUp(title, form);		
	}
	
	function confirmPopUp(trueAction, title, text)
	{
		confirmPopUpFull(trueAction, '', title, text);
	}
	
	function confirmPopUpFull(trueAction, falseAction, title, text)
	{
		text=wrapText(text,60);
		var html = '<div style="width:100%;overflow:auto;border:0;">';
		html += '<div style="overflow:visible;padding:10px;">' + text + '</div>'
			+ '<div style="*width:90%;overflow:auto;padding:10px 0px 10px 0px;"><div style="width:50%;float:left;text-align:right;"><input type="submit" class="popUpButtonOk" value="" onclick="' + trueAction + '" id="popUpButtonOk" style="margin-right:10px;" /></div>'
	        + '<div style="width:50%;float:left;text-align:left;"><input type="submit" class="popUpButtonCancel" value="" onclick="hidePopup();' + falseAction + ' return false;" style="margin-left:10px;" /></div>'
	      	+ '</div></div>';
		rawPopUp(title, html);
		if(document.getElementById('popUpButtonOk'))
			document.getElementById('popUpButtonOk').focus();
	}
		
	function alertPopUp(title, text)
	{
		text=wrapText(text,60);
		var html = '<div style="width: 90%; border-style: none; margin: 0; padding: 10px; height: 60%;">'
				+ text + '</div>' 
				+ '<div style="overflow:auto;padding:10px 0px 10px 0px;"><input type="submit" class="popUpButtonOk" value="" onclick="hidePopup(); return false;"/>'
		      	+ '</div>';
		rawPopUp(title, html);
	}
	
	//this is raw pop up in old style on divs
	function rawPopUp(title, html)
	{
		$('body').append('<div id="popUpBg"></div>').append('<div id="mainPopUp"></div>');
		var background = $('#popUpBg');		
		var divTop = '<div class="popUpDivAll"><div class="popUpDivT"><div class="popUpDivTL">&nbsp;</div><div class="popUpDivTR">&nbsp;</div></div><div class="popUpDiv">';
		var divBot = '</div><div class="popUpDivB"><div class="popUpDivBL">&nbsp;</div><div class="popUpDivBR">&nbsp;</div></div></div>';
		var main = $('#mainPopUp');
		main.append(divTop + '<div class="popUpTitle" style="font-size: 12px; font-weight: bold; color: #205565; text-align: left; margin:5px;">' + title + '</div>' + '<div class="popUpContent">' + html + '</div>' + divBot)
			.fadeIn();
		background.css("opacity", 0.4).width($(window).width()).height($(window).height()).fadeIn();		
	}
	
	//this is raw pop up in old style on tables
	function rawPopUp_tables(title, html)
	{
		$('body').append('<div id="popUpBg"></div>').append('<div id="mainPopUp"></div>');
		var background = $('#popUpBg');
		var tableTop = '<table class="popUpTbl" cellspacing=0 cellpading=0><tr><td class="popUpTblTL">&nbsp;</td><td>&nbsp;</td>'
					+ '<td class="popUpTblTR">&nbsp;</td></tr><tr><td>&nbsp;</td><td>';
		var tableBot = '</td><td>&nbsp;</td></tr>'
					+ '<tr><td class="popUpTblBL">&nbsp;</td><td>&nbsp;</td><td class="popUpTblBR">&nbsp;</td></tr></table>';
		var main = $('#mainPopUp');
		main.append(tableTop +  '<div class="popUpTitle">' + title + '</div>' + '<div class="popUpContent">' + html + '</div>' + tableBot)
			.fadeIn();
		background.css("opacity", 0.4).width($(window).width()).height($(window).height()).fadeIn();		
	}
	
	function homeShowBox(name)
	{
		$('.homeExploreBt').fadeOut();
		$('#homeTop > div').fadeOut();
		$('#homeTop' + name + 'Bg').fadeIn();
		$('#homeTop' + name + 'Bg .homeExploreBt').fadeIn();
		$('.activeImg').fadeOut();
		$('.inactiveImg').fadeIn();
		$('#' + name + 'Bt .inactiveImg').fadeOut();
		$('#' + name + 'Bt .activeImg').fadeIn();
	}

	var homeRotator;
	
	function startHomeRotator()
	{
		clearTimeout(homeRotator);
		homeRotator = setTimeout("rotateHomeBox()", 5000);
	}
	
	function stopHomeRotator()
	{
		clearTimeout(homeRotator);
	}
	
	function rotateHomeBox()
	{
		var boxes = ['Research', 'Challenges', 'Services'];
		var stop = false;
		$.each(boxes, function(i, el){
			if(!stop && $('#homeTop' + el + 'Bg').css('display') != 'none')
			{
				homeShowBox(boxes[(i + 1) % 3]);
				stop = true;
			}
		});
		startHomeRotator();
	}
		
	function checkIfStringNotEmptyAndSafe(obj)
	{	
		if(obj.value.length<1)
		{			
			alert('Field '+obj.getAttribute('name')+' cannot be empty.');
			return false;
		}
		else
		{
			if(!obj.value.match(/^[a-zA-Z0-9\:\*\s\'!\?\/\\\._-]*$/)) //\\:';,
			{
				alert('You have entered a character which we cannot accept.\n Please, correct it.\n You can enter only ascii characters.');
				return false;
			}
			else
			{
				return true;
			}
		}
	}
	