jQuery(window).unbind('unload').unload(function(){
	var elems = document.getElementsByTagName('*'),
	pos = elems.length + 1, // +1 for the document
	dummy = {};

	jQuery.data( dummy );
	for( var expando in dummy );
     
	while( pos-- ){
		var elem = elems[ pos ] || document, //add the document
		id = elem[expando];

		if( id && jQuery.cache[id] && jQuery.cache[id].events )
			jQuery.event.remove( elem );
	}
});

var UNICODE_LETTERS =
	   "\\u0041-\\u005a\\u0061-\\u007a\\u00aa\
	   \\u00b5\\u00ba\\u00c0-\\u00d6\
	   \\u00d8-\\u00f6\\u00f8-\\u01ba\\u01bc-\\u01bf\
	   \\u01c4-\\u02ad\\u0386\\u0388-\\u0481\\u048c-\\u0556\
	   \\u0561-\\u0587\\u10a0-\\u10c5\\u1e00-\\u1fbc\\u1fbe\
	   \\u1fc2-\\u1fcc\\u1fd0-\\u1fdb\\u1fe0-\\u1fec\
	   \\u1ff2-\\u1ffc\\u207f\\u2102\\u2107\\u210a-\\u2113\
	   \\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\
	   \\u212a-\\u212d\\u212f-\\u2131\\u2133\\u2134\\u2139\
	   \\ufb00-\\ufb17\\uff21-\\uff3a\\uff41-\\uff5a";


var isInteger = function(s){
	return !isNaN(parseInt(s));
};

var validatorBlurElement = null;
var showErrorsFocus = function(errorMap, errors, validator) {
	validator.defaultShowErrors();
	if(validator.toShow[0] && validatorBlurElement == null)
	{
		var error = validator.toShow[0];
		$(error).before('<input type="text" id="errorFocus" />');
		$('#errorFocus').focus();
		$('#errorFocus').remove();
	}
}

var jqModalWindowActive = false;
var jqModalID = 'mainJqModal';
var jqModalMainWindow = null;
var jqModalMainWindowPositioned = false;
var baseDocumentHeight = null;

var globalJSONResponseHandler = function(evt, request, settings){
	try{
		json = JSON.parse(request.responseText);
	} catch(e) { return; }
	if(jqModalMainWindow != null)
	{
		if(json['status'] == ACH_STATUS_FORCE_REDIRECT)
		{
			document.location.href = json['redirect'];
			return;
		}
		updateWindowContent(json);
	} else
	{
		createjqModalWindow(json);
	}
};

var createjqModalWindow = function(json){
	if(jqModalMainWindow == null)
	{
		jqModalMainWindow = $('<div id="'+jqModalID+'" class="jqmTransparentWindow">');
		$('body').append(jqModalMainWindow);
		jqModalMainWindow.jqm({modal:false, onShow: openJqModalMainWindow, onHide: closeJqModaMainWindow, overlay: 20});
	}
	updateWindowContent(json);
};

var destroyMainJqModalWindowAndCreateNew = function(json){
	if(uploadModal)
		hideUploadModal();
	jqModalMainWindow.remove();
	jqModalWindowActive = false;
	jqModalMainWindow = null;
	jqModalMainWindowPositioned = false;
	createjqModalWindow(json);
};

var updateWindowContent = function(json){
	jqModalMainWindow.empty();
	jqModalMainWindow.append(json['data']);
	jqModalMainWindow.jqmAddClose('#'+jqModalID+' .jqmClose');
	jqModalMainWindow.jqmShow();
	jqModalWindowActive = true;
	if(jqModalMainWindowPositioned == false)
	{
		jqModalMainWindow.css({ width: jqModalMainWindow.children().width(), 'margin-left': parseInt(jqModalMainWindow.css('margin-left'))+jqModalMainWindow.children().width() });
		jqModalMainWindowPositioned = true;
	}
};

var openJqModalMainWindow = function(hash){
	hash.w.fadeIn(200);
};

var closeJqModaMainWindow = function(hash){
	hash.w.fadeOut(200);
	hash.o.remove();
	jqModalWindowActive = false;
};

/* Dynamic file upload */
var uploadModalInitiated = false;
var uploadModal = null;
var initUploadModal = function(){
	if(uploadModalInitiated)
		return;
	tmp = $('#fileUploadingModal').parent();
	$('body').append(tmp.clone());
	tmp.remove();
	uploadModal = $($('#fileUploadingModal').parent().jqm({modal: true, overlay: 20}));
	uploadModalInitiated = true;
};
var showUploadModal = function(){
	uploadModal.jqmShow();
};
var hideUploadModal = function(){
	uploadModal.jqmHide();
};
/* Dynamic file upload - end */

$(document).ready(function(){
	$(document).ajaxSuccess(globalJSONResponseHandler);
	baseDocumentHeight = $(document).height();
});

//Wrap fancybox images
$(document).ready(function(){
	$('.__fancyimage').fancybox({ 'hideOnContentClick': true });
});
