// JavaScript Document
/*
	verze 0.8.4.2	19.7.09
	mailto:gonny&#64;centrum.cz
*/

function bindFormSubmit(idForm,submitBtnValue,ajaxDataHandle, ajaxOnComplete)
{
	if(document.getElementById(idForm))
	{
		//tinyMce Hack .. totiz zlobi v IE a OPERA
		if(typeof tinyMCE != 'undefined')
		{
			if(tinyMCE.activeEditor != null)
			{
				var tinyContent = (tinyMCE.activeEditor.getContent());
				var tinyContentId = (tinyMCE.activeEditor.id);
				var tinyContentName = $("#"+escape(tinyContentId)).attr("name");
				if(typeof tinyContentName == 'undefined')
				{
					tinyContentName = tinyContentId;
				}
			}
		}
		$("#"+idForm).unbind('submit');
		$("#"+idForm).submit(function()
		{
			var jSon = new Object();
			jSon = '';
			$(':input',this).each(function()
			{
				var val = this.value.replace(/'/g,"\\'");
				val = val.replace(/\r/g,""); //možná by šlo místo dvou replace dán \r\n na \\n nebo jen \n
				val = val.replace(/\n/g,"\\n");
//				val = val.replace(/\r\n/g,"\\n");
				nam = $(this).attr("name");
				
				if(this.type == 'submit')
				{
					if(this.name == submitBtnValue)
					{
						jSon += "'"+nam+"': '"+ val+"',"; 
					}
				}
				else if(this.type == 'checkbox')
				{
					if(this.checked == true)
					{
						jSon += "'"+nam+"': '"+ val+"',";
					}
				}
				else if(this.type == 'select-one')
				{
					jSon += "'"+nam+"': '"+ this.options[this.selectedIndex].value +"',";
				}
				else if(this.type == 'radio')
				{
					if(this.checked == true)
					{
						jSon += "'"+nam+"': '"+ val+"',";
					}
				}
				else if(this.type == 'password')
				{
					jSon += "'"+nam+"': '"+SHA1(val)+"',"; //pozor escapuje znak \'
				}
				else
				{
					if(typeof tinyContent != 'undefined' && nam == tinyContentName)
					{
						val = tinyContent.replace(/'/g,"\\'");
						val = val.replace(/\r/g,"");
						val = val.replace(/\n/g,"\\n");
					}
					jSon += "'"+nam+"': '"+ val+"',";
				}
			});
			jSon += "'AJAX' : '1'";
			jSon = eval("thisFormData = {"+jSon+"}");			
			
			url = this.action;
			if(url.indexOf('#') != -1 )
			{
				targetElm = url.substring(url.indexOf('#'));
				targetHeight = $(targetElm).height();
				$(targetElm).addClass('loading').height(targetHeight).empty();
				targetAjaxElement = targetElm;
			}
			ajaxCall(url, jSon, function(data){
				if(ajaxDataHandle != null)
				{
					ajaxDataHandle(data,idForm);
				}
				else
				{
					ajaxFormDataHandle(data,idForm);
				}
			},ajaxOnComplete);
			return false;
		});
	}
}
function ajaxFormDataHandle(data,idForm)
{
	if(data != '')
	{
		if(data.indexOf("false") == -1)
		{
			$("textarea, input[type='text']","#"+idForm).each(function ()
			{
				this.value = '';
			});
			$("input[type='checkbox']","#"+idForm).each(function ()
			{
				$(this).attr("checked",false);
			});
		}
		data = data.replace(/false/gi,'');
		handleContent(data);
	}
	else
	{
		alert(data);
		handleContent("Žádná operace neproběhla, zřejmě je špatný vstup, nebo script nevrátil odpověď.");
	}
}
function ajaxCall(ajaxUrl, ajaxData, ajaxDataCallback, onComplete, inJsonReturn)
{
	if(ajaxUrl.indexOf('#') != -1)
	{
		targetAjaxElement = ajaxUrl.substring(ajaxUrl.indexOf('#'));
		$(targetAjaxElement).addClass("loading");
		ajaxUrl = ajaxUrl.substring(0, ajaxUrl.indexOf('#'));
	}
	if(ajaxUrl.indexOf('&AJAX=1') != -1)
	{
		aj = ajaxUrl.substring(ajaxUrl.indexOf('&AJAX=1'));
		ajaxUrl = ajaxUrl.substring(0,ajaxUrl.indexOf('&AJAX=1'))+aj;
		
	}
	ajaxUrl = ajaxUrl + ((ajaxUrl.indexOf('?') > -1) ? '&' : '?') + 'AJAX=1';
	if(!ajaxData && ajaxData != '')
	{
// když není zadá druhý ani třetí parametr, tak se pouští standardní odezva na #			alert(" Nejaky AjAx " + ajaxData);
//		ajaxData = function(data) {handleContent(data);};
		ajaxData = '';
		ajaxDataCallback = function(data) {handleContent(data);};
	}
	else if(!ajaxDataCallback)
	{
		ajaxDataCallback = ajaxData;
		ajaxData = null;
	}
	$("#d-loading").show();
	$.ajax({
		type : "POST",
		url: ajaxUrl,
		//dataType: "json",
		data : ajaxData,
		success : function(data)
		{
			if(ajaxDataCallback) 
			{
				ajaxDataCallback(data);
				$("body").append(returnLoadAppend(ajaxUrl));
			}
			
		},
		complete : function()
		{
			$("#d-loading").hide();
			if(onComplete) {
				onComplete();
			}
		},
		error : function()
		{
			$("#d-loading").html("Chyba v odezvě");
		}
	})
//	ajaxLoad();
}
function handleContent (data)
{
	if(data != '')
	{
		if(targetAjaxElement)
		{
			$(targetAjaxElement).removeClass('loading').css('height','auto').hide().html(data).fadeIn(500);
		}
		else
		{
			if(!document.getElementById('noDiv'))
			{
				$("body").append('<div id="noDiv"><div id="noDivHandle">[x]</div><div id="noDivContent"></div></div>');
				$("#noDivHandle").bind("click",function() 
				{
					$("#noDiv").hide("slow");
					$("#noDivContent").empty();
				});
			}
			$("#noDiv").show("fast").end();
			$("#noDivContent").html(data);
		}
		//po zapsaní dat
		//ajaxLoad();
	}
	//ajaxRefresh();
}
var targetAjaxElement = '';
/*
	Načítání dat
*/
var returnLoadData = function(data)
{
	if(data)
	{
		//tu se dají transformovat
		return data;
	}
};
/*
	target = jQuery Object
*/
function loadToTarget(href,target,aData)
{
	//if target exists
	if(target.length)
	{
		aData = aData || '';
		ajaxCall(href, aData, function(data)
		{
			target.html(data);
		});
	}
}
/*
	Refresh dané adresy, adresa se uloží do display:none elementu a pak je možné ji znovu zavolat přes ajaxCall
*/
function ajaxRefresh()
{
	if($("#backLog").length > 0)
	{
		ajaxLoadUrl($("#backLog").html());
	}
	return false;
}
/*
	//pripojuje se za AJAXem načtenému obsahu
*/
function previousUrl ()
{
	if(document.getElementById("backLog"))
	{
		return $(".p","#backLog").html();
	}
	return false;
}
function currentUrl ()
{
	if(document.getElementById("backLog"))
	{
		return  $(".c","#backLog").html();
	}
	return false;
}
var returnLoadAppend = function(href)
{
	if(document.getElementById("backLog"))
	{
/*		if(href == $(".p","#backLog").html())
		{
			//prev == current
			//current == next
		}
		else if(href == $(".n","#backLog").html())
		{
			//next == current
			//current == prev
		}
		else*/
//		{
			$(".p","#backLog").html($(".c","#backLog").html());
			$(".c","#backLog").html(href);
//		}
		return '';
	}
	else
	{
		return '<div id="backLog" style="display:none;"><div class="c">'+href+'</div><div class="p"></div><div class="n"></div></div>';
	}
};
function ajaxLoadUrl(href, target)
{
	 targetId = href.substring(href.indexOf('#'));
	 targetElm = $(targetId+' .content').length ? targetId + ' .content' : targetId;
	 targetAjaxElement = targetElm;
	 targetHeight = $(targetElm).height();
		$(targetElm).ajaxError(function() {
		  window.location = href;
				  alert("Error");
		  return false;
	  }).addClass('loading').height(targetHeight).empty();
	  ajaxCall(href,function(data) {
		 if(targetElm)
		 {
			 if(document.getElementById(targetElm.substr(1)))
			 {
//				 alert(data.snippets[1]);
				if(typeof(data) == 'object')
				{
				 for ( id in data.snippets) 
				 {
					//(id, data.snippets[id]);
					data = (data.snippets[id]);
				 }
				}
			  $(targetElm).removeClass('loading').css('height','auto').hide().html(returnLoadData(data)).ScrollTo(300).fadeIn("fast")
			  .append(returnLoadAppend(href));
			 }
			 else
			 {
				 targetAjaxElement = '';
				 handleContent(data);
			 }
		 }
	  });
  	return false;
}
$(document).ready(
/*
	udelat include stránek i těch, které mají head a html, prostě to odstranic (clip)
	načíst veškeré scripty a linky(css) do arraye pak porovnávat s načtenými z nové stránky
	- je možné posléze přepsat všechny url anchorů a imagu
	vice http://www.jotschi.de/?p=254
	-- zajímavé řešení
*/
	function(){
		/* ajax loader */
		$('a.ajaxLoad').live('click',function()
		{
			href = $(this).blur().attr('href');
		 	return ajaxLoadUrl(href);
		});

	$.fn.extend({
		ScrollTo: function(speed) {
			var targetOffset = $(this).offset().top;
	        $('html,body').animate({scrollTop: targetOffset}, speed);
	        return this;
		}
	});
 });

function SHA1 (msg) {
 
	function rotate_left(n,s) {
		var t4 = ( n<<s ) | (n>>>(32-s));
		return t4;
	};
 
	function lsb_hex(val) {
		var str="";
		var i;
		var vh;
		var vl;
 
		for( i=0; i<=6; i+=2 ) {
			vh = (val>>>(i*4+4))&0x0f;
			vl = (val>>>(i*4))&0x0f;
			str += vh.toString(16) + vl.toString(16);
		}
		return str;
	};
 
	function cvt_hex(val) {
		var str="";
		var i;
		var v;
 
		for( i=7; i>=0; i-- ) {
			v = (val>>>(i*4))&0x0f;
			str += v.toString(16);
		}
		return str;
	};
 
 
	function Utf8Encode(string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	};
 
	var blockstart;
	var i, j;
	var W = new Array(80);
	var H0 = 0x67452301;
	var H1 = 0xEFCDAB89;
	var H2 = 0x98BADCFE;
	var H3 = 0x10325476;
	var H4 = 0xC3D2E1F0;
	var A, B, C, D, E;
	var temp;
 
	msg = Utf8Encode(msg);
 
	var msg_len = msg.length;
 
	var word_array = new Array();
	for( i=0; i<msg_len-3; i+=4 ) {
		j = msg.charCodeAt(i)<<24 | msg.charCodeAt(i+1)<<16 |
		msg.charCodeAt(i+2)<<8 | msg.charCodeAt(i+3);
		word_array.push( j );
	}
 
	switch( msg_len % 4 ) {
		case 0:
			i = 0x080000000;
		break;
		case 1:
			i = msg.charCodeAt(msg_len-1)<<24 | 0x0800000;
		break;
 
		case 2:
			i = msg.charCodeAt(msg_len-2)<<24 | msg.charCodeAt(msg_len-1)<<16 | 0x08000;
		break;
 
		case 3:
			i = msg.charCodeAt(msg_len-3)<<24 | msg.charCodeAt(msg_len-2)<<16 | msg.charCodeAt(msg_len-1)<<8	| 0x80;
		break;
	}
 
	word_array.push( i );
 
	while( (word_array.length % 16) != 14 ) word_array.push( 0 );
 
	word_array.push( msg_len>>>29 );
	word_array.push( (msg_len<<3)&0x0ffffffff );
 
 
	for ( blockstart=0; blockstart<word_array.length; blockstart+=16 ) {
 
		for( i=0; i<16; i++ ) W[i] = word_array[blockstart+i];
		for( i=16; i<=79; i++ ) W[i] = rotate_left(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1);
 
		A = H0;
		B = H1;
		C = H2;
		D = H3;
		E = H4;
 
		for( i= 0; i<=19; i++ ) {
			temp = (rotate_left(A,5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;
			E = D;
			D = C;
			C = rotate_left(B,30);
			B = A;
			A = temp;
		}
 
		for( i=20; i<=39; i++ ) {
			temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;
			E = D;
			D = C;
			C = rotate_left(B,30);
			B = A;
			A = temp;
		}
 
		for( i=40; i<=59; i++ ) {
			temp = (rotate_left(A,5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;
			E = D;
			D = C;
			C = rotate_left(B,30);
			B = A;
			A = temp;
		}
 
		for( i=60; i<=79; i++ ) {
			temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;
			E = D;
			D = C;
			C = rotate_left(B,30);
			B = A;
			A = temp;
		}
 
		H0 = (H0 + A) & 0x0ffffffff;
		H1 = (H1 + B) & 0x0ffffffff;
		H2 = (H2 + C) & 0x0ffffffff;
		H3 = (H3 + D) & 0x0ffffffff;
		H4 = (H4 + E) & 0x0ffffffff;
 
	}
 
	var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4);
 
	return temp.toLowerCase();
}
