(function($){
  $.fn.ScrollCenter = function(options) {
    var pos = {
      sTop : function() {
        return window.pageYOffset || document.documentElement && document.documentElement.scrollTop ||	document.body.scrollTop;
      },
      wHeight : function() { 
        return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body.clientHeight;
      },
      sLeft	: function(){
      	return window.pageXOffset || document.documentElement && document.documentElement.scrollLeft ||	document.body.scrollLeft;
      },
      wWidth : function(){
      	return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body.clientWidth;
      }
    };
    return this.each(function(index) {
      if (index == 0) {
        var $this = $(this);
        var elHeight = $this.height();
        var elWidth = $this.width();
		    var elTop = pos.sTop() + (pos.wHeight() / 2) - (elHeight / 2);
		    var elLeft = pos.sLeft() + (pos.wWidth() / 2) - (elWidth / 2);
      
		/*
		$this.css({
          position: 'absolute',
          marginTop: '0',
          top: elTop,
          left:elLeft
        });*/
        
         $this.animate({ 
	          marginTop: '0',
	          top: elTop,
	          left:elLeft
	      }, "fast","swing" );

      }
      
    });
  };

})(jQuery);



if (Goingup == null){
	var Goingup = {};
}

/* this is predefined form options object. it is empty here.
 * this object should be used in case we need predefine form options which created on the fly
 * we can define this options on any diferent scripts
 * 
 * usually thats uses for forms that created on fly. 
 * this predefained options will be added(not replaced) to provided form options  
 *  
 * example:
 * Goingup.formOptions['fmDeleteAlias'] = {
		callAfterSuccess:function(data){
			if (data.aliases_list_html){
				jQuery('#list_rows').html(data.aliases_list_html);
			}
			if (data.aliases_list_totals){
				jQuery('#total_pageviews').html(Goingup.number_format(data.aliases_list_totals.pageviews));
				jQuery('#total_visitors').html(Goingup.number_format(data.aliases_list_totals.visitors));
				jQuery('#total_keywords').html(Goingup.number_format(data.aliases_list_totals.keywords));
			}
		}
		
	};
	Goingup.formOptions['fmAddAlias'] = {
		callAfterSuccess:function(data){
			if (data.aliases_list_html){
				jQuery('#list_rows').html(data.aliases_list_html);
			}
			if (data.aliases_list_totals){
				jQuery('#total_pageviews').html(Goingup.number_format(data.aliases_list_totals.pageviews));
				jQuery('#total_visitors').html(Goingup.number_format(data.aliases_list_totals.visitors));
				jQuery('#total_keywords').html(Goingup.number_format(data.aliases_list_totals.keywords));
			}
		}
	};
 * 
 * */
Goingup.formOptions = {
	
};

Goingup.popUpWin=0;
Goingup.popUpWindow = function(URLStr, left, top, width, height){
  if(Goingup.popUpWin)  {
    if(!Goingup.popUpWin.closed) Goingup.popUpWin.close();
  }
  Goingup.popUpWin = open(URLStr, 'popUpWin', 'toolbar=0,location=0,directories=0,status=0,menubar=no,scrollbars=0,resizable=0,copyhistory=0,width='+width+',height='+height+',left='+left+', top='+top+',screenX='+left+',screenY='+top+'');
}

Goingup.parseUrlParams = function (string_url_params){
	var tmp = string_url_params.split('&');
	var res = {};
	for (var i=0; i<tmp.length; i++){
		var _tmp = tmp[i].split('=');
		res[_tmp[0]] = _tmp[1]; 
	}
	return res;
}

Goingup.ajaxForms = function(){
	jQuery('form.__ajax__').submit(function(event){
		var options = {
			show_inline_loader_for:jQuery('.submit_btn_room',this),
			callBefore:function(ob){
				Goingup.Dialog.showLoadingBox('','165px');
				jQuery(ob).data('submit',jQuery('.submit_btn_room',ob).html());
			},
			callAfterSuccess:function(data,ob){
				jQuery('.submit_btn_room',ob).html(jQuery(ob).data('submit'));
			},
			callAfterFailed:function(data,ob){
				jQuery('.submit_btn_room',ob).html(jQuery(ob).data('submit'));
			}
			
		}
		if (Goingup.formOptions[this.id]){
			if (Goingup.formOptions[this.id] instanceof Object){
				for (k in Goingup.formOptions[this.id]){
					options[k] =Goingup.formOptions[this.id][k];
				}
			}
		}
		return Goingup.Form.Submit(this,null,options);	
	});
}

/**
 * simple copy of php http_build_query function
 */
Goingup.http_bild_query = function (obj,separator){
						var arg_separator = (typeof separator!= 'undefined')?separator:escape('&');
						var use_key, use_val;
						var tmp_arr = [];
						var i =0;
						for(key in obj){
							if (obj[key] instanceof Array){
								tmp_arr[i] = Goingup.http_bild_query_from_obj(key,obj[key]);
							}else if (obj[key]!=null){
						        use_key = encodeURIComponent(key);
						        use_val = encodeURIComponent((obj[key].toString()));
						        use_val = use_val.replace(/%20/g, '+');
						 
						        tmp_arr[i] = use_key + '=' + use_val;
						        
					        	
							}
							i++;
					    }
						var result = tmp_arr.join(arg_separator);
					    return result;
},
/**
 * helper for previous function
 */
Goingup.http_bild_query_from_obj = function (mainkey,obj){
						var arg_separator = escape('&');
						var use_key = mainkey;
						var use_val = '';
						var tmp_arr = [];
						var i=0;
						for(key in obj){
					        
					        use_val = encodeURIComponent((obj[key].toString()));
					        use_val = use_val.replace(/%20/g, '+');
					 
					        use_key = mainkey + '['+key+']';
							use_key = encodeURIComponent(use_key);
							
					        tmp_arr[i] = use_key + '=' + use_val;
					        i++;
					    }
		
					    return tmp_arr.join(arg_separator);
},
/**
 *  if there is form in dialog window than it will wraped to ajax layer, 
 *  but if form has '_no_ajax' class than wrapping to ajax layer will not be happened
 * 
 *	Goingup.Dialog.Show(options);
 *  options = {
 *  	msg_title:'title of box',
 *  	msg:'message will be showed in them box',
 *  	buttons:[
 *  			{value:'Text on button',class:'ok|ko',onclick:'any js code here'}
 *  			{value:'Text on button',class:'ok|ko',onclick:'any js code here'}
 *  			....
 *  			]
 *  } 
 */
Goingup.Dialog = function (){
	
	return {
		onchangeAplied:false,
		timeOut:{},
		movingVars:{moving:false,topWidth:0, leftWidth:0},
		defaultWidth:null,
		showLoadingBox:function(title,width){
			var data = {
				msg_title:( typeof title != 'undefined' && title!='' ?title:'Please wait...'),
				html:'<div><div class="loading_box"></div></div>',
            	buttons:[]
			};
			if (typeof width !='undefined' && width!=''){
				data['width'] = width;
			}
			Goingup.Dialog.Show(data);
		},
		Options:{
			dialogId:'div_modal_window',
			blockbgId:'div_backgroundblacklayer'
		},
		Selectors:{
			id:'#div_modal_window',
			title:'.head>h1',
			body:'.body',
			buttons:'.foot>.btns',
			footer:'.foot',
			moveHandler:'.head',
			blockbg:'#div_backgroundblacklayer'
		},
		Templates:{
			//btn:'<a href="javascript:;" class="[class]" onclick="[onclick]">[value]</a>'
			btn:'<a href="javascript:;" class="[class]" onclick="[onclick]"><span class="r"><span class="m">[value]</span></span></a>'
		},
		getButtonHtml:function(value,onclick,cls){
			
			var value = typeof value !='undefined'?value:'OK';
			var onclick = typeof onclick !='undefined'?onclick:'Goingup.Dialog.Hide()';
			var cls = typeof cls != 'undefined'?cls:'button';
			var tpl = Goingup.Dialog.Templates.btn;
			
			tpl = tpl.replace(/\[class\]/g,cls).replace(/\[onclick\]/g,onclick).replace(/\[value\]/g,value);
			
			return tpl;
		},
		OK:function(){
			Goingup.Dialog.Submit();
		},
		blockUI:function(){
			var ob = Goingup.Dialog;
			
			if (jQuery(ob.Selectors.blockbg).length==0){
				var div = jQuery('<div id="'+ob.Options.blockbgId+'" style=" position: absolute;	opacity: 0.5; filter: alpha(opacity=50); background-color:#000000; height:100%; width:100%; left:0px; top:0px; margin:0; padding:0; z-index:99;"></div>');
				jQuery('body').append(div);
			}else{
				var div = jQuery(ob.Selectors.blockbg);
			}
			var pageSize = Goingup.getPageSize();
		
			div.height(pageSize[1]);
			div.width(pageSize[0]);
			//div.width('100%');
			if (!div.is(':visible')){
				div.fadeIn(300);
			}
		},
		redrawUI:function(){
			var ob = Goingup.Dialog;
			
			if (jQuery(ob.Selectors.blockbg).length==0){
				var div = jQuery('<div id="'+ob.Options.blockbgId+'" style=" position: absolute;	opacity: 0.5; filter: alpha(opacity=50); background-color:#000000; height:100%; width:100%; left:0px; top:0px; margin:0; padding:0; z-index:99;"></div>');
				jQuery('body').append(div);
			}else{
				var div = jQuery(ob.Selectors.blockbg);
			}
			
			Goingup.Dialog.moveCenter();
		},
		startMoving:function(e){
			var ob = Goingup.Dialog;
			ob.movingVars.moving = true;
			
			var oPopup = jQuery(Goingup.Dialog.Selectors.id);
			
			var offset = oPopup.offset();
			
			var mouseX = ob.mouseX(e);
			var mouseY = ob.mouseY(e)
			
			ob.movingVars.topWidth = mouseY - offset.top;
			ob.movingVars.leftWidth = mouseX - offset.left;
		},
		endMoving:function(e){
			var ob = Goingup.Dialog;
			ob.movingVars.moving = false;
		},
		moveCenter:function(){
			
			
			var ob = Goingup.Dialog;
			clearTimeout(ob.timeOut['moveCenter']);
			
			ob.timeOut['moveCenter'] = setTimeout(function(){
				var div = jQuery(ob.Selectors.blockbg);
				if (div.is(':visible')){
					var pageSize = Goingup.getPageSize();
					div.height(pageSize[1]);
					div.width(pageSize[0]);
					jQuery(ob.Selectors.id).ScrollCenter();
				}
			},100);
			
			
		},
		mouseX: function mouseX(evt) {
					if (evt.pageX) return evt.pageX;
					else if (evt.clientX)
					   return evt.clientX + (document.documentElement.scrollLeft ?
					   document.documentElement.scrollLeft :
					   document.body.scrollLeft);
					else return null;
		},
		mouseY:function (evt) {
					if (evt.pageY) return evt.pageY;
					else if (evt.clientY)
					   return evt.clientY + (document.documentElement.scrollTop ?
					   document.documentElement.scrollTop :
					   document.body.scrollTop);
					else return null;
		},
		Submit:function(){
			jQuery(Goingup.Dialog.Selectors.id).find('form').submit();
		},
		/**
		 * data = {
		 * 		msg_title:'box title',
		 * 		html:'<div> this is html content</div>'
		 * }
		 */
		Show:function(data,mode){
			var ob = Goingup.Dialog;
			var html = data.msg?data.msg:'';
			if (typeof(data.html)=='string'){
				html = html+' '+data.html; 
			}
			
			if (typeof mode != 'undefined' && mode=='auto'){
				if (!html){
					return true;
				}
			}
			
			
			if (html != '' && html!=null){
				if (data.msg_title){
					jQuery(ob.Selectors.title,ob.Selectors.id).html(data.msg_title);
				}else{
					jQuery(ob.Selectors.title,ob.Selectors.id).html('Message');
				}	
				if (data.width){
					var w = jQuery(ob.Selectors.id).width();
					if (parseInt(data.width) != parseInt(w)){
						
						ob.defaultWidth = jQuery(ob.Selectors.id).css('width');
						// fix for opera
						if (ob.defaultWidth == '0px'){
							ob.defaultWidth = 'auto';
						}
						jQuery(ob.Selectors.id).css('width',data.width);
					}
				}else if (ob.defaultWidth!=null){
					jQuery(ob.Selectors.id).css('width',ob.defaultWidth);
				}
				jQuery(ob.Selectors.body,ob.Selectors.id).html(html);
				jQuery(ob.Selectors.buttons,ob.Selectors.id).empty();
				jQuery(ob.Selectors.buttons,ob.Selectors.id).html('<div style="clear: both;"></div>');
				
				
				
				if (typeof data.buttons != 'undefined' && data.buttons!=null && data.buttons.length>0 && data.buttons!='none'){
					var buttons = data.buttons;
					
					for (var i=0; i<buttons.length; i++){
						var buttonclass = buttons[i]['class']?buttons[i]['class']:'button';	
						var button = jQuery(Goingup.Dialog.getButtonHtml(buttons[i].value,buttons[i].onclick,buttonclass));
						jQuery(ob.Selectors.buttons,ob.Selectors.id).prepend(button);
					}
						
					jQuery(ob.Selectors.footer,ob.Selectors.id).show();
				}else if (typeof data.buttons == 'undefined'){
					var button = jQuery(Goingup.Dialog.getButtonHtml());
					
					jQuery(ob.Selectors.buttons,ob.Selectors.id).prepend(button);
					jQuery(ob.Selectors.footer,ob.Selectors.id).show();
				}else{
					jQuery(ob.Selectors.footer,ob.Selectors.id).hide();
					jQuery(ob.Selectors.footer,ob.Selectors.id).css('min-height','20px');
					
				}
				Goingup.Dialog._show(data);
			}else{
				Goingup.Dialog.Hide();
			}
		},
		Hide:function(data){
			var ob = Goingup.Dialog;
			
			Goingup.Dialog._hide();
			jQuery(ob.Selectors.id).css('width',ob.defaultWidth);
		},
		_show:function(data){
			
			var ob = Goingup.Dialog;
			
			Goingup.Dialog.blockUI();
			
			var oPopup = jQuery(ob.Selectors.id);
			if (ob.onchangeAplied == false){
				ob.onchangeAplied = true;
				jQuery(window).resize(function(){
					if (ob.movingVars.moving==false){
						Goingup.Dialog.redrawUI();
					}
				});
				jQuery(window).scroll(function(){
					if (ob.movingVars.moving==false){
						Goingup.Dialog.redrawUI();
					}
				});
				
				jQuery('body').mousemove(function(e){
					if (ob.movingVars.moving==true){
						
						var left = ob.mouseX(e)-ob.movingVars.leftWidth;
						var top = ob.mouseY(e)-ob.movingVars.topWidth;
						oPopup.css({'left':left,'top':top});
					}
					return false;
				});
				
				jQuery(ob.Selectors.moveHandler,ob.Selectors.id).mousedown(function(e){
					
					ob.startMoving(e);
					return false;
				});
				jQuery(ob.Selectors.moveHandler,ob.Selectors.id).mouseup(function(e){
					ob.endMoving(e);
					return false;
				});
			}
			
			jQuery(ob.Selectors.id).ScrollCenter().fadeIn(200);
			
			if (jQuery(Goingup.Dialog.Selectors.id).find('form').find("input[type='file']").length==0){
			jQuery(Goingup.Dialog.Selectors.id).find('form').unbind().submit(function(){
					if (jQuery(this).hasClass('_no_ajax')){
						return true;
					}
					var fmId = this.id;
					var options = {
									loader_class:data['loader_class']!=null?data['loader_class']:null,
									show_inline_loader_for:'.foot>.btns'
								  }
					/**
					 * process predefined options
					 */
					if (fmId!=null && Goingup.formOptions[fmId]!=null){
						for (var k in Goingup.formOptions[fmId]){
							options[k]=Goingup.formOptions[fmId][k];
						}
					}
					return Goingup.Form.Submit(this,null,options);
				});
			}
			//jQuery(ob.Selectors.id).ScrollCenter();
		},
		_hide:function(){
			var ob = Goingup.Dialog;
			jQuery(ob.Selectors.blockbg).fadeOut(200);
			jQuery(ob.Selectors.id).fadeOut(200);
		}
	} 
}();

/**
 * options - setings:
 * 		{
 * 			url							:request url
 * 			params						:http get params
 * 			callBefore					:function(data){},
 * 			show_inline_loader_for		:selector, - if not null than will be placed into it loader block
 * 			loading						:boolean, - if false than "Loading..." text will not be showed
 * 			callAfterFailed				:function(data){},
 * 			callAfterSuccess			:function(data){},
 * 			callAfter					:function(){},
 * 		}
 */
Goingup.Request = function(options){
					var params = options.params!=null?options.params:{};
					var current_data = params;
					var mode = (options && options.mode)?options.mode:'standard';

					current_data = Goingup.Form.applyHiddenParams(current_data);
					var showDialogData = options!=null && typeof options.showDialogData != 'undefined'?options.showDialogData:true;
					var loader_class = options!=null && options.loader_class!=null && options.loader_class!=''?options.loader_class:'inline_loader';
					

					if (options!=null){
						if (options.callBefore instanceof Function){
							options.callBefore();
						}
						
						if (options.show_inline_loader_for!=null){
							if (options.inline_loader_no_message){
								jQuery(options.show_inline_loader_for).html(jQuery('<div></div>').attr('class',loader_class));
							}else{
								jQuery(options.show_inline_loader_for).html(jQuery('<div></div>').attr('class',loader_class).html('Please wait...'));	
							}
						}

					}
					
					jQuery.ajax({
						type:options.method?options.method:'get',
						url:options.url?options.url:window.location.href.replace(/\?.*|#.*/,''),
						data:current_data,
						dataType: 'json',
						success: function(data){
					   		if (!data.ok){
					   			if (typeof(data.blocks)!='undefined' && data.blocks.length>0){
					   				for (var _i=0; _i<data.blocks.length; _i++){
					   					if (typeof data.blocks[_i] != 'undefined' && data.blocks[_i].selector && data.blocks[_i].html){
					   						jQuery(data.blocks[_i].selector).html(data.blocks[_i].html);
					   					}
					   				}
					   			}
					   			if (showDialogData){
					   				Goingup.Dialog.Show(data,mode);
					   			}
					   			
					   			if (options!=null){
									if (options.callAfterFailed instanceof Function){
										options.callAfterFailed(data);
									}
								}
								
					   		}else{
					   			if (typeof(data.blocks)!='undefined' && data.blocks.length>0){
					   				for (var _i=0; _i<data.blocks.length; _i++){
					   					if (typeof data.blocks[_i] != 'undefined' && data.blocks[_i].selector && data.blocks[_i].html){
					   						jQuery(data.blocks[_i].selector).html(data.blocks[_i].html);
					   					}
					   				}
					   			}
					   			if (showDialogData){
					   				Goingup.Dialog.Show(data,mode);
					   			}
					   			if (typeof data.js != 'undefined' && data.js!=null && data.js!='' ){
					   				eval(data.js);
					   			}
					   			
					   			if (options!=null){
									if (options.callAfterSuccess instanceof Function){
										options.callAfterSuccess(data);
									}
								}
					   			
					   		}
					   		if (options!=null){
								if (options.callAfter instanceof Function){
									options.callAfter(data);
								}
							}
					   	},
					   	error:function(){
					   		var data = {ok:false,msg:'Request failed, check your connection!','msg_title':'Internal error'}
							if (options!=null &&options.callAfterFailed instanceof Function){
								options.callAfterFailed(data);
							}else{
								Goingup.Dialog.Show(data,mode);
							}
					   	}
					});
					return false;
};
Goingup.MarkErrorFields = function(objForm,fields){
	objForm.find('*').removeClass('x-error');
	if (typeof fields == 'undefined'){
		return false;
	}
	for (var i=0; i<fields.length; i++){
		objForm.find("[name^='"+fields[i]+"']").addClass('x-error');
	}
}
/**
 * objForm - form object
 * params - additional params for request
 * options - setings:
 * 		{
 * 			overrideFunction			:fucntion(){},
 * 			callBefore					:function(data){},
 * 			show_inline_loader_for		:selector, - if not null than will be placed into it loader block
 * 			loading						:boolean, - if false than "Loading..." text will not be showed
 * 			callAfterFailed				:function(data){},
 * 			callAfterSuccess			:function(data){},
 * 			callAfter					:function(){},
 * 			showDialogData				:bool	- 	if true than all messages will be showed automatically, 
 * 													if false and callAfterSuccess seted than will be used only callAfterSuccess function
 * 		}
 */
Goingup.Form = function(){
	return {
		result:false,
		hiddenParams:{'__request_type__':'ajax'},
		applyHiddenParams:function(params){
			for (var i in Goingup.Form.hiddenParams){
				if (params instanceof Array){
					var obj = {'name':i,'value':Goingup.Form.hiddenParams[i]};
					params[params.length] = obj;
				}else if(params instanceof Object){
					params[i] = Goingup.Form.hiddenParams[i];	
				}else if(params.constructor = String){
					params += '&'+i+'='+Goingup.Form.hiddenParams[i];	
				}
			}
			return params;
		},
		Submit:function(objFm,params,options){
					if (options != null && options.overrideFunction instanceof Function){
						Goingup.Dialog.Hide();
						var p = jQuery(objFm).serializeArray();
						var data = {};
						for (var i=0; i<p.length; i++){
							data[p[i]['name']] = p[i]['value'];
						}
						return options.overrideFunction(data);
					}
			
					if (Goingup.Form.result==true){
						return true;
					}
					var mode = (options && options.mode)?options.mode:'standard';
					var showDialogData = options!=null && typeof options.showDialogData != 'undefined'?options.showDialogData:true;
					var current = jQuery(objFm);
					var current_data = (params!=null)?params:current.serializeArray();
					current_data = Goingup.Form.applyHiddenParams(current_data);
					
					var loader_class = options!=null && options.loader_class!=null && options.loader_class!=''?options.loader_class:'inline_loader';
					if (options!=null){
						if (options.callBefore instanceof Function){
							options.callBefore(objFm);
						}
						if (options.show_inline_loader_for!=null){
							if (options.inline_loader_no_message){
								jQuery(options.show_inline_loader_for).html(jQuery('<div></div>').attr('class',loader_class));
							}else{
								jQuery(options.show_inline_loader_for).html(jQuery('<div></div>').attr('class',loader_class).html('Please wait...'));	
							}
						}
					}
					
					if (options!=null && options.loading!=null && options.loading==false){
					
					}else{
						jQuery.each(current.find(":input[type='submit']"),function(){
						jQuery(this).attr('name',jQuery(this).val());
						jQuery(this).val('Loading...');
					});
					}
					
					
					
					jQuery.ajax({
						type:current.attr('method'),
						url:current.attr('action'),
						data:current_data,
						dataType: 'json',
						success: function(data){
							if (!data.msg_title){
								data.msg_title = 'Message';
							}
							
							jQuery.each(current.find(":input[type='submit']"),function(){
								jQuery(this).val(jQuery(this).attr('name'));
								jQuery(this).blur();
							});
					   		if (!data.ok){
					   			// fill provided html blocks
					   			/**
					   			 * exmple:
					   			 * 	data.blocks = [
					   			 * 		{'selector':'#id>div>div','html'=>'any html content here'},
					   			 * 		{'selector':'#id>div>div','html'=>'any html content here'},
					   			 * 		..................
					   			 * ]
					   			 */
					   			if (typeof(data.blocks)!='undefined' && data.blocks.length>0){
					   				for (var _i=0; _i<data.blocks.length; _i++){
					   					if (typeof data.blocks[_i] != 'undefined' && data.blocks[_i].selector && data.blocks[_i].html){
					   						jQuery(data.blocks[_i].selector).html(data.blocks[_i].html);
					   					}
					   				}
					   			}
					   			// mark all error fields in form
					   			Goingup.MarkErrorFields(current,data.idents);
					   			// show messages
					   			if (showDialogData){
					   				Goingup.Dialog.Show(data,mode);
					   			}
					   			
					   			if (options!=null){
									if (options.callAfterFailed instanceof Function){
										options.callAfterFailed(data,objFm);
									}
								}
								
					   		}else{
					   			if (typeof data['return'] != 'undefined' && data['return']!=null && data['return']!=false){
									Goingup.Form.result = true;
									return jQuery(objFm).submit();
					   			}
					   			
					   			// fill provided html blocks
					   			
					   			if (typeof(data.blocks)!='undefined' && data.blocks.length>0){
					   				
					   				for (var _i=0; _i<data.blocks.length; _i++){
					   					
					   					if (typeof data.blocks[_i] != 'undefined' && data.blocks[_i].selector && data.blocks[_i].html){
					   						jQuery(data.blocks[_i].selector).html(data.blocks[_i].html);
					   					}
					   				}
					   			}
					   			if (showDialogData){
					   				Goingup.Dialog.Show(data,mode);
					   			}
					   				
					   			
					   			
					   			
					   			if (typeof data.js != 'undefined' && data.js!=null && data.js!='' ){
					   				eval(data.js);
					   			}
					   			
					   			if (options!=null){
									if (options.callAfterSuccess instanceof Function){
										options.callAfterSuccess(data,objFm);
									}else{
										Goingup.Dialog.Show(data);
									}
								}
					   			
					   		}
					   		if (options!=null){
								if (options.callAfter instanceof Function){
									options.callAfter(data,objFm);
								}
							}
					   	},
					   	error:function(data){
							if (options!=null && options.callAfterFailed instanceof Function){
								var data = {ok:false,msg:'Request failed, check your connection!','msg_title':'Internal Error!'}
								options.callAfterFailed(data,objFm);
							}
							
							// mark all error fields in form
				   			Goingup.MarkErrorFields(current,data.idents);
				   			// show messages
				   			Goingup.Dialog.Show(data);
					   	}
					});
					return Goingup.Form.result;
				}
	}
}();
Goingup.getPageSize = function(){
	//
	// getPageSize()
	// Returns array with page width, height and window width, height
	// Core code from - quirksmode.com
	// Edit for Firefox by pHaez
	//
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = window.innerWidth + window.scrollMaxX;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	
//	console.log(self.innerWidth);
//	console.log(document.documentElement.clientWidth);

	if (self.innerHeight) {	// all except Explorer
		if(document.documentElement.clientWidth){
			windowWidth = document.documentElement.clientWidth; 
		} else {
			windowWidth = self.innerWidth;
		}
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

//	console.log("xScroll " + xScroll)
//	console.log("windowWidth " + windowWidth)

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = xScroll;		
	} else {
		pageWidth = windowWidth;
	}
//	console.log("pageWidth " + pageWidth)

	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}

Goingup.number_format = function( number, decimals, dec_point, thousands_sep ) {
    // http://kevin.vanzonneveld.net
    // +   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)
    // *     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'
    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);
    }
    if (s.indexOf(dec) === -1 && prec > 1) {
        s += dec+new Array(prec).join(0)+'0';
    }
    return s;
}
Goingup.doTooltipsTimeOut = null;
Goingup.doTooltips 	= function(html_block_selector,offsettop,offsetleft){
	if (html_block_selector==null) html_block_selector = 'body';
	
	var offsettop = typeof offsettop !='undefined'?offsettop:25;
	var offsetleft = typeof offsetleft !='undefined'?offsetleft:0;
	
	jQuery('._tooltip',html_block_selector).unbind();
	jQuery('._tooltip',html_block_selector).mouseover(function (){
		clearTimeout(Goingup.doTooltipsTimeOut);
		var jThis = jQuery(this);
		var divTooltip = jQuery('#_tooltip');
		if (divTooltip.length==0){
			//create tooltip div
			var htmlTooltip = "<div id=\"_tooltip\" style=\"display:none; position:absolute\"></div>";
			jQuery('body').append(htmlTooltip);
			divTooltip = jQuery('#_tooltip');
			
			divTooltip.mouseover(function(){
				clearTimeout(Goingup.doTooltipsTimeOut);
			});
			divTooltip.mouseout(function(){
				clearTimeout(Goingup.doTooltipsTimeOut);
				Goingup.doTooltipsTimeOut = setTimeout(function(){
					jQuery('#_tooltip').hide();
				},100);
			});
			
		}else{
			//use existing toolyip div
			divTooltip = jQuery('#_tooltip');
			
		}
		
		divTooltip.html(jThis.attr('rel'));
		//this.title = '';
		var this_offset = jThis.offset();
		var left = parseInt(this_offset.left) + parseInt(offsetleft);
		var top = parseInt(this_offset.top) + parseInt(offsettop);
		
		divTooltip.css({'left':left+'px','top':top+'px'}).show();
		
		jQuery('#_tooltip').show();
	});
	jQuery('._tooltip',html_block_selector).mouseout(function (){
		clearTimeout(Goingup.doTooltipsTimeOut);
		Goingup.doTooltipsTimeOut = setTimeout(function(){
			jQuery('#_tooltip').hide();
		},100);
		
		
	});
}
Goingup.IsNumeric = function(sText){
   if (sText=='') return false;
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;

   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return IsNumber;
}			
Goingup.truncate = function(text,chars,dots){
			var chars 	= typeof chars != 'undefined'?chars:80;
			var dots 	= typeof dots != 'undefined'?dots:'...';
			//console.log(text.length);
			if (text.length>chars){
				text = text.substring(0,chars)+dots;
			}
			
			return text;
}
jQuery(function(){
	Goingup.ajaxForms();
	jQuery(window).keypress(function(e){
		switch (e.keyCode){
			case 27:
				Goingup.Dialog.Hide();
			break;
		}
		
	});
});
