function u(str) { return decodeURIComponent(str); }

var AjaxAction = {
	/*
	ActionName: function(LocalValues, Result) {
		$('ElementName').innerHTML = u(Result);
	}
	*/
	
	getSecondLevelRegions: function(LocalValues, Result) {
		if (u(Result[1]) == 'ok'){
			$('secondlevelregions-container').innerHTML = u(Result[2]);
		}
	},
    
    getBrancheSecondLevelRegions: function(LocalValues, Result) {
		if (u(Result[1]) == 'ok'){
			$('secondlevelregions-container').innerHTML = u(Result[2]);
		}
	},
    
    checkBrancheFilter: function(LocalValues, Result) {
		if (u(Result[1]) == 'ok'){
			$('branche-filter').submit();
		} else {
        	$('filter-status').innerHTML = u(Result[2]);
        }
	},
    
     checkRequestFilter: function(LocalValues, Result) {
		if (u(Result[1]) == 'ok'){
			submitFilterForm();
		} else {
        	$('filter-status').innerHTML = u(Result[2]);
        }
	},
    
    addBasketItem: function(LocalValues, Result) {
		if (u(Result[1]) == 'added'){
			eval(u(Result[2]));
            AjaxHandler.sendRequest('updateBasket', 'r=1');
		}
	},
    
    delBasketItem: function(LocalValues, Result) {
		if (u(Result[1]) == 'deleted'){
			eval(u(Result[2]));
            AjaxHandler.sendRequest('updateBasket', 'r=1');
		}
	},
    
	updateBasket: function(LocalValues, Result) {
		if (u(Result[1]) == 'ok'){
			$('basket-container').innerHTML = u(Result[2]);
            showBrancheTaskComplete();
		}
	},
    
    // myProject Functionality
    
    editProject: function(LocalValues, Result) {
		if (u(Result[1]) == 'ok'){
			$('myproject-sidebar').innerHTML = u(Result[2]);
		}
	},
    
    NodeAction: function(LocalValues, Result) {
    	if (u(Result[1]) != 'progress')
        {
            $('myproject-sidebar').innerHTML = u(Result[2]);
            if (u(Result[1]) == 'time') {
                DateChooserLoad_Time();
            } else if (u(Result[1]) == 'budget') {
                DateChooserLoad_Budget();
            }
    	}
        SideBar_AfterAction();
	},
    
    MyFilesAction: function(LocalValues, Result) {
		$('myproject-sidebar').innerHTML = u(Result[2]);
	},
	
	MyBlogAction: function(LocalValues, Result) {
		$('myproject-sidebar').innerHTML = u(Result[2]);
	},
    
    getRequestSearchResult: function(LocalValues, Result) {
		if (u(Result[1]) == 'ok'){
			$('request-search-list').innerHTML = u(Result[2]);
		}
	},
    
    addRequestSearchResult: function(LocalValues, Result) {
		if (u(Result[1]) == 'ok'){
			$('request-sidebar-selected').innerHTML = u(Result[2]);
            showAddComplete_Search();
		}
	},
    
    addRequestBasketResult: function(LocalValues, Result) {
		if (u(Result[1]) == 'ok'){
			$('request-sidebar-selected').innerHTML = u(Result[2]);
            showAddComplete_Basket();
		}
	},
    
    SaveRequestComment: function(LocalValues, Result) {
		if (u(Result[1]) == 'ok'){
			afterCommentSave(u(Result[2]));
		}
	},
    
    GetRequestReciever: function(LocalValues, Result) {
		if (u(Result[1]) == 'ok'){
			showReciever(u(Result[2]), u(Result[3]));
		}
	},
    
     ProfileBasketAction: function(LocalValues, Result) {
		if (u(Result[1]) == 'ok'){
			$('profile-basket-status').innerHTML = u(Result[2]);
            AjaxHandler.sendRequest('updateBasket', 'r=1');
		}
	}
}


var AjaxHandler = {
	Version: 			'1.0',
	ActionFile: 		'/ajaxaction.html',
	ProcessingAjax:		0,
	StatusIcon:			'/images/progress_indicator.gif',
	StatusIconW:		16,
	StatusIconH:		16,
	StatusIconID:		'AjaxStatusIcon',
	OpenHandles:		Array(),
	Delimiter:			'+~**#@-_,',
	
	sendRequest: function(Action, RemoteParameters) {
		//alert(RemoteParameters);
		if (Action.length == 0) return 0;
		var LocalParameters = Array();
		for (var i = 2; i < arguments.length; i++)
    		LocalParameters.push(arguments[i]);

		//AjaxHandler.handleProcess('Begin');
		var ReqStamp = AjaxHandler.getHash();
		var theAjaxReq = new Ajax.Request(
			AjaxHandler.ActionFile,
			{
				method: 'get', 
				parameters: 'action=' + Action + '&hash=' + ReqStamp + '&' + RemoteParameters, 
				onComplete: AjaxHandler.showResponse,
				onFailure: AjaxHandler.showResponse
			});

		if (theAjaxReq) {
			AjaxHandler.OpenHandles.push(ReqStamp);
			AjaxHandler.OpenHandles[ReqStamp] = LocalParameters;
			AjaxHandler.OpenHandles[ReqStamp].push('Action');
			AjaxHandler.OpenHandles[ReqStamp]['Action'] = Action;
			return 1;
		}
  	},
	
	showResponse: function(theRequest) {
		//alert(theRequest.responseText);
		var Result = AjaxHandler.checkResponse(theRequest.responseText);
		//AjaxHandler.handleProcess('End');
		
		if (Result.length) {
			var ArrEl = AjaxHandler.OpenHandles[Result[0]];
			var Action = ArrEl['Action'];
			ArrEl.pop();
			eval('AjaxAction.' + Action + '(ArrEl, Result);');
			return 1;
		} else {
			return 0;
		}
	},
	
	checkResponse: function(Str) {
		try {
			var Parts = Str.split(AjaxHandler.Delimiter);
			if (AjaxHandler.OpenHandles[Parts[0]]['Action'].length) {
				return Parts;
			} else {
				return 0;
			}
		} catch (e) {
			return 0;
		}
	},
	
	handleProcess: function(Status) {
		if (Status == 'Begin') {
			AjaxHandler.ProcessingAjax++;

			if (AjaxHandler.ProcessingAjax == 1) {
				try {
					var _StatusIconID = $(AjaxHandler.StatusIconID).id;
					var StatusIcon = $(_StatusIconID);
				} catch (e) {
					var objBody = document.getElementsByTagName("body").item(0);
					
					var objStatusIcon = document.createElement('img');
					objStatusIcon.setAttribute('id', AjaxHandler.StatusIconID);
					objStatusIcon.style.position = 'absolute';
					objStatusIcon.style.display = 'none';
					objStatusIcon.style.zIndex = 99;
					objStatusIcon.setAttribute('src', AjaxHandler.StatusIcon);
					objStatusIcon.setAttribute('height', AjaxHandler.StatusIconH);
					objStatusIcon.setAttribute('width', AjaxHandler.StatusIconW);
					objBody.appendChild(objStatusIcon);
				}
				
				var StatusIcon = $(AjaxHandler.StatusIconID);
				var Sizes =  AjaxHandler.getPageSize()
				var l = (Sizes[0] - AjaxHandler.StatusIconW) / 2;
				var t = (Sizes[1] - AjaxHandler.StatusIconH) / 2;
				l = Math.ceil(l);
				t = Math.ceil(t);

				StatusIcon.style.left = l + 'px';
				StatusIcon.style.top = t + 'px';
				
				new Effect.Appear(StatusIcon);
			}
		} else {
			AjaxHandler.ProcessingAjax--;
			
			if (!AjaxHandler.ProcessingAjax) {
				var StatusIcon = $(AjaxHandler.StatusIconID);
				new Effect.Fade(StatusIcon);
			}
		}
	},
	
	getHash: function() {
		return new Date().getTime();
	},
	
	 getPageSize: function() {
	
		var windowWidth, windowHeight;
		
		if (self.innerHeight) {
			windowWidth = self.innerWidth;
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) {
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) { // other Explorers
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}	

		arrayPageSize = new Array(windowWidth,windowHeight);
		return arrayPageSize;
	}
}