//scroolpane
(function(A){A.jScrollPane={active:[]};A.fn.jScrollPane=function(C){C=A.extend({},A.fn.jScrollPane.defaults,C);var B=function(){return false};return this.each(function(){var O=A(this);O.css("overflow","hidden");var X=this;if(A(this).parent().is(".jScrollPaneContainer")){var Ac=C.maintainPosition?O.position().top:0;var L=A(this).parent();var d=L.innerWidth();var Ad=L.outerHeight();var M=Ad;A(">.jScrollPaneTrack, >.jScrollArrowUp, >.jScrollArrowDown",L).remove();O.css({top:0})}else{var Ac=0;this.originalPadding=O.css("paddingTop")+" "+O.css("paddingRight")+" "+O.css("paddingBottom")+" "+O.css("paddingLeft");this.originalSidePaddingTotal=(parseInt(O.css("paddingLeft"))||0)+(parseInt(O.css("paddingRight"))||0);var d=O.innerWidth();var Ad=O.innerHeight();var M=Ad;O.wrap(A("<div></div>").addClass("jScrollPaneContainer").css({height:Ad+"px",width:d+"px"}));A(document).bind("emchange",function(Ae,Af,p){O.jScrollPane(C)})}if(C.reinitialiseOnImageLoad){var N=A.data(X,"jScrollPaneImagesToLoad")||A("img",O);var G=[];if(N.length){N.each(function(p,Ae){A(this).bind("load",function(){if(A.inArray(p,G)==-1){G.push(Ae);N=A.grep(N,function(Ag,Af){return Ag!=Ae});A.data(X,"jScrollPaneImagesToLoad",N);C.reinitialiseOnImageLoad=false;O.jScrollPane(C)}}).each(function(Af,Ag){if(this.complete||this.complete===undefined){this.src=this.src}})})}}var o=this.originalSidePaddingTotal;var l={height:"auto",width:d-C.scrollbarWidth-C.scrollbarMargin-o+"px"};if(C.scrollbarOnLeft){l.paddingLeft=C.scrollbarMargin+C.scrollbarWidth+"px"}else{l.paddingRight=C.scrollbarMargin+"px"}O.css(l);var m=O.outerHeight();var i=Ad/m;if(i<0.99){var H=O.parent();H.append(A("<div></div>").addClass("jScrollPaneTrack").css({width:C.scrollbarWidth+"px"}).append(A("<div></div>").addClass("jScrollPaneDrag").append(A("<div></div>").addClass("jScrollPaneDragTop"),A("<div></div>").addClass("jScrollPaneDragBottom"))));var z=A(">.jScrollPaneTrack",H);var P=A(">.jScrollPaneTrack .jScrollPaneDrag",H);if(C.showArrows){var g;var Ab;var S;var r;var j=function(){if(r>4||r%4==0){y(u+Ab*b)}r++};var K=function(p){A("html").unbind("mouseup",K);g.removeClass("jScrollActiveArrowButton");clearInterval(S)};var Z=function(){A("html").bind("mouseup",K);g.addClass("jScrollActiveArrowButton");r=0;j();S=setInterval(j,100)};H.append(A("<a></a>").attr({href:"javascript:;",className:"jScrollArrowUp"}).css({width:C.scrollbarWidth+"px"}).html("Scroll up").bind("mousedown",function(){g=A(this);Ab=-1;Z();this.blur();return false}).bind("click",B),A("<a></a>").attr({href:"javascript:;",className:"jScrollArrowDown"}).css({width:C.scrollbarWidth+"px"}).html("Scroll down").bind("mousedown",function(){g=A(this);Ab=1;Z();this.blur();return false}).bind("click",B));var Q=A(">.jScrollArrowUp",H);var J=A(">.jScrollArrowDown",H);if(C.arrowSize){M=Ad-C.arrowSize-C.arrowSize;z.css({height:M+"px",top:C.arrowSize+"px"})}else{var s=Q.height();C.arrowSize=s;M=Ad-s-J.height();z.css({height:M+"px",top:s+"px"})}}var w=A(this).css({position:"absolute",overflow:"visible"});var D;var Y;var b;var u=0;var V=i*Ad/2;var a=function(Ae,Ag){var Af=Ag=="X"?"Left":"Top";return Ae["page"+Ag]||(Ae["client"+Ag]+(document.documentElement["scroll"+Af]||document.body["scroll"+Af]))||0};var f=function(){return false};var v=function(){n();D=P.offset(false);D.top-=u;Y=M-P[0].offsetHeight;b=2*C.wheelSpeed*Y/m};var E=function(p){v();V=a(p,"Y")-u-D.top;A("html").bind("mouseup",T).bind("mousemove",h);if(A.browser.msie){A("html").bind("dragstart",f).bind("selectstart",f)}return false};var T=function(){A("html").unbind("mouseup",T).unbind("mousemove",h);V=i*Ad/2;if(A.browser.msie){A("html").unbind("dragstart",f).unbind("selectstart",f)}};var y=function(Ae){Ae=Ae<0?0:(Ae>Y?Y:Ae);u=Ae;P.css({top:Ae+"px"});var Af=Ae/Y;w.css({top:((Ad-m)*Af)+"px"});O.trigger("scroll");if(C.showArrows){Q[Ae==0?"addClass":"removeClass"]("disabled");J[Ae==Y?"addClass":"removeClass"]("disabled")}};var h=function(p){y(a(p,"Y")-D.top-V)};var q=Math.max(Math.min(i*(Ad-C.arrowSize*2),C.dragMaxHeight),C.dragMinHeight);if(q<20)q=20;P.css({height:q+"px"}).bind("mousedown",E);var k;var R;var I;var t=function(){if(R>8||R%4==0){y((u-((u-I)/2)))}R++};var Aa=function(){clearInterval(k);A("html").unbind("mouseup",Aa).unbind("mousemove",e)};var e=function(p){I=a(p,"Y")-D.top-V};var U=function(p){v();e(p);R=0;A("html").bind("mouseup",Aa).bind("mousemove",e);k=setInterval(t,100);t()};z.bind("mousedown",U);H.bind("mousewheel",function(Ae,Ag){v();n();var Af=u;y(u-Ag*b);var p=Af!=u;return !p});var F;var W;function c(){var p=(F-u)/C.animateStep;if(p>1||p<-1){y(u+p)}else{y(F);n()}}var n=function(){if(W){clearInterval(W);delete F}};var x=function(Af,p){if(typeof Af=="string"){$e=A(Af,O);if(!$e.length){return}Af=$e.offset().top-O.offset().top}H.scrollTop(0);n();var Ae=-Af/(Ad-m)*Y;if(p||!C.animateTo){y(Ae)}else{F=Ae;W=setInterval(c,C.animateInterval)}};O[0].scrollTo=x;O[0].scrollBy=function(Ae){var p=-parseInt(w.css("top"))||0;x(p+Ae)};v();x(-Ac,true);A("*",this).bind("focus",function(Ah){var Ag=A(this);var Aj=0;while(Ag[0]!=O[0]){Aj+=Ag.position().top;Ag=Ag.offsetParent()}var p=-parseInt(w.css("top"))||0;var Ai=p+Ad;var Af=Aj>p&&Aj<Ai;if(!Af){var Ae=Aj-C.scrollbarMargin;if(Aj>p){Ae+=A(this).height()+15+C.scrollbarMargin-Ad}x(Ae)}});if(location.hash){x(location.hash)}A(document).bind("click",function(Ae){$target=A(Ae.target);if($target.is("a")){var p=$target.attr("href");if(p.substr(0,1)=="#"){x(p)}}});A.jScrollPane.active.push(O[0])}else{O.css({height:Ad+"px",width:d-this.originalSidePaddingTotal+"px",padding:this.originalPadding});O.parent().unbind("mousewheel")}})};A.fn.jScrollPane.defaults={scrollbarWidth:10,scrollbarMargin:5,wheelSpeed:18,showArrows:false,arrowSize:0,animateTo:false,dragMinHeight:1,dragMaxHeight:99999,animateInterval:100,animateStep:3,maintainPosition:true,scrollbarOnLeft:false,reinitialiseOnImageLoad:false};A(window).bind("unload",function(){var C=A.jScrollPane.active;for(var B=0;B<C.length;B++){C[B].scrollTo=C[B].scrollBy=null}})})(jQuery);

//hashchange
(function($){$.fn.hashchange=function(fn){$(window).bind("jQuery.hashchange",fn);return this;};$.observeHashChange=function(options){var opts=$.extend({},$.observeHashChange.defaults,options);if(isHashChangeEventSupported()){nativeVersion()}else{setIntervalVersion(opts);}};var locationHash=null;var functionStore=null;var interval=0;$.observeHashChange.defaults={interval : 100};function isHashChangeEventSupported(){return typeof window.onhashchange!=='undefined';}function nativeVersion(){locationHash=document.location.hash;window.onhashchange=onhashchangeHandler;}function onhashchangeHandler(e,data){var oldHash=locationHash;locationHash=document.location.hash;$(window).trigger("jQuery.hashchange",{before: oldHash,after: locationHash});}function setIntervalVersion(opts){if(locationHash==null){locationHash=document.location.hash;}if(functionStore!=null){clearInterval(functionStore);}if(interval!=opts.interval){functionStore=setInterval(checkLocationHash,opts.interval);interval=opts.interval;}}function checkLocationHash(){if(locationHash!=document.location.hash){var oldHash=locationHash;locationHash=document.location.hash;$(window).trigger("jQuery.hashchange",{before: oldHash,after: locationHash});}}$.observeHashChange();})(jQuery);

//mouse wheel
(function($){$.event.special.mousewheel={setup: function(){var handler=$.event.special.mousewheel.handler;if($.browser.mozilla)$(this).bind('mousemove.mousewheel',function(event){$.data(this,'mwcursorposdata',{pageX: event.pageX,pageY: event.pageY,clientX: event.clientX,clientY: event.clientY});});if(this.addEventListener)this.addEventListener(($.browser.mozilla?'DOMMouseScroll' : 'mousewheel'),handler,false);else this.onmousewheel=handler;},teardown: function(){var handler=$.event.special.mousewheel.handler;$(this).unbind('mousemove.mousewheel');if(this.removeEventListener)this.removeEventListener(($.browser.mozilla?'DOMMouseScroll' : 'mousewheel'),handler,false);else this.onmousewheel=function(){};$.removeData(this,'mwcursorposdata');},handler: function(event){var args=Array.prototype.slice.call(arguments,1);event=$.event.fix(event||window.event);$.extend(event,$.data(this,'mwcursorposdata')||{});var delta=0,returnValue=true;if(event.wheelDelta)delta=event.wheelDelta/120;if(event.detail)delta=-event.detail/3;event.data=event.data||{};event.type="mousewheel";args.unshift(delta);args.unshift(event);return $.event.handle.apply(this,args);}};$.fn.extend({mousewheel: function(fn){return fn?this.bind("mousewheel",fn): this.trigger("mousewheel");},unmousewheel: function(fn){return this.unbind("mousewheel",fn);}});})(jQuery);

//stapi
(function($){
	var UAcontainer;
	var UAoptions;
	var UACartWindow;
		
	$.userApi = {
		//relatedDomains: [ "dev.snacktools.net", "dev.bannersnack.net", "dev.photosnack.net", "dev.podsnack.net", "dev.quizsnack.net", "dev.tubesnack.net", "dev.flipsnack.net", "dev.slidesnack.net", "dev.sharesnack.net"],
		relatedDomains: [ "snacktools.com", "bannersnack.com", "photosnack.com", "podsnack.com", "quizsnack.com", "tubesnack.com", "flipsnack.com", "slidesnack.com", "sharesnack.com"],
		//relatedDomains: [ "snacktools", "bannersnack", "photosnack", "podsnack", "quizsnack", "tubesnack", "flipsnack", "slidesnack", "sharesnack"],
		
		//apiUrl: 'http://stapi.dev.snacktools.net/',
		apiUrl: 'http://stapi.snacktools.com/',
		//apiUrl: 'http://stapi.snacktools/',
		
		//snacktoolsUrl: 'http://dev.snacktools.net/',
		snacktoolsUrl: 'http://www.snacktools.com/',
		//snacktoolsUrl: 'http://snacktools/',
		
		lang: 'en',
		ajaxUrl: 'index.php',
		localAjaxUrl: '/stapi.php',
		ajaxDataType: 'jsonp',
		ajaxType: 'get',
		containerId: 'userApiCont',
		loginPage: '/login.html',
		sessionExpiredPage: '/session-inactive.html',
		openCloseTime: 300,
		loadPage: function() {
			if (location.hash.length > 1){
				uhash = location.hash.substring(1);
				data = {};
				if (uhash.length > 1){
					extraData = uhash.split('&');
					for (i in extraData){
						if (i == 0){
							data.page = $.userApi.urldecode(extraData[i]);
							if(data.page.substr(0,3) != 'st-'){
								return;
							}
							data.page = data.page.substr(3);
							continue;
						}
						p = extraData[i].split('=');
						data[$.userApi.urldecode(p[0])] = $.userApi.urldecode(p[1]);
					}
					$("#" + $.userApi.containerId).userApi(data);
				}
			}
		},
		isLoginPage: function(){
			return (location.pathname == this.loginPage);
		},
		getLangPre: function(){
			return '/' + this.lang;
		},
		urlencode: function(str){
			return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
		    replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
		},
		urldecode: function(str){
			return decodeURIComponent((str + '').replace(/\+/g, '%20'));
		},
		goToLogin: function(next){
			var lpage = this.loginPage;
			if (next){
				lpage += '?next=' + this.urlencode(next);
			}
			location.href = lpage;
		},
		showFacebookPopin: function (){
			ifrsrc = $.userApi.apiUrl + 'facebook/facebook.php?terminal='+$.userApi.urlencode($.userApi.terminal);
			if (typeof $.userApi.referralHash != 'undefiend'){
				ifrsrc += '&campaignHash=' + $.userApi.urlencode($.userApi.referralHash); 
			}
			if ($.userApi.cookie('UAuref')){
				ifrsrc += '&uref=' + $.userApi.urlencode($.userApi.cookie('UAuref'));
			}
			pWidth = 981;
			pHeight = 512;
			posX = ((screen.width - pWidth)) / 2;
			posY = ((screen.height - pHeight)) / 2;
			window.open(ifrsrc, '_blank', 'left='+posX+',top='+posY+',width='+pWidth+',height='+pHeight+',toolbar=0,resizable=1,menubar=0,status=1,scrollbars=no', true);
			return false;
		},
		showTwitterPopin: function (){
			ifrsrc = $.userApi.apiUrl + 'twitter/index.php?terminal='+$.userApi.urlencode($.userApi.terminal);
			if (typeof $.userApi.referralHash != 'undefiend'){
				ifrsrc += '&campaignHash=' + $.userApi.urlencode($.userApi.referralHash); 
			}
			if ($.userApi.cookie('UAuref')){
				ifrsrc += '&uref=' + $.userApi.urlencode($.userApi.cookie('UAuref'));
			}
			pWidth = 800;
			pHeight = 754;
			posX = ((screen.width - pWidth)) / 2;
			posY = ((screen.height - pHeight)) / 2;
			window.open(ifrsrc, '_blank', 'left='+posX+',top='+posY+',width='+pWidth+',height='+pHeight+',toolbar=0,resizable=1,menubar=0,status=1,scrollbars=no', true);
			return false;
		},
		showMySpacePopin: function (){
			ifrsrc = $.userApi.apiUrl + 'myspace/index.php?terminal='+$.userApi.urlencode($.userApi.terminal);
			if (typeof $.userApi.referralHash != 'undefiend'){
				ifrsrc += '&campaignHash=' + $.userApi.urlencode($.userApi.referralHash); 
			}
			if ($.userApi.cookie('UAuref')){
				ifrsrc += '&uref=' + $.userApi.urlencode($.userApi.cookie('UAuref'));
			}
			pWidth = 500;
			pHeight = 438;
			posX = ((screen.width - pWidth)) / 2;
			posY = ((screen.height - pHeight)) / 2;
			window.open(ifrsrc, '_blank', 'left='+posX+',top='+posY+',width='+pWidth+',height='+pHeight+',toolbar=0,resizable=1,menubar=0,status=1,scrollbars=no', true);
			return false;
		},
		showOpenIDPopin: function (type){
			ifrsrc = $.userApi.apiUrl + 'OpenID/index.php?terminal='+$.userApi.urlencode($.userApi.terminal);
			if (typeof $.userApi.referralHash != 'undefiend'){
				ifrsrc += '&campaignHash=' + $.userApi.urlencode($.userApi.referralHash); 
			}
			ifrsrc += '&type=' + $.userApi.urlencode(type);
			if ($.userApi.cookie('UAuref')){
				ifrsrc += '&uref=' + $.userApi.urlencode($.userApi.cookie('UAuref'));
			}
			switch(type){
				default:
					pWidth = 450; pHeight = 364;
					break;
				case 'yahoo':
					pWidth = 492; pHeight = 585;
					break;
			}
			posX = ((screen.width - pWidth)) / 2;
			posY = ((screen.height - pHeight)) / 2;
			window.open(ifrsrc, '_blank', 'left='+posX+',top='+posY+',width='+pWidth+',height='+pHeight+',toolbar=0,resizable=1,menubar=0,status=1,scrollbars=no', true);
			return false;
		},
		checkLogin: function (sId) {
			$.userApi.closeFacebookPopup();
			$.userApi.sessionId = sId;
			var dtosend = {page: 'check-login', PHPSESSID: sId, lang: $.userApi.lang};
			if ($.userApi.externLoginFrom == 'login' && $("#UALErememberme").attr("checked")){
				dtosend.rememberme = 1;
			}
			if (typeof UAcontainer == 'undefined'){
				$("<div />").userApi(dtosend);
			} else {
				UAcontainer.userApi(dtosend);
			}
		},
		closeFacebookPopup: function() {
			$(window).focus();
		},
		showAccountInactiveMessage: function(){
			$.userApi.getText('account_deactivated_message', function(text){
				$(".UALoginSignup .UALSleft > div").append('<div class="uaerr" style="padding:0;">' + text + '</div>');
			});
		},
		colapse: function() {
			$.userApi.close(UAcontainer);
			$.userApi.colapsed = true;
			scrollTop = $(window).scrollTop();
			location.href = '#';
			if (scrollTop > 0){
				$(window).scrollTop(scrollTop);
			}
			return false;
		},
		jump: function(l) {
			window.location.href = l;
		},
		open: function(c,colapsed) {
			if (!$.userApi.isOpen){
				if($(window).scrollTop() > 0){
					$('html,body').animate({scrollTop: 0}, $.userApi.openCloseTime/2);
				}
				c.slideDown($.userApi.openCloseTime, function(){
					$.userApi.isOpen = true;
					if (colapsed != true){
						UAcontainer.userApi(UAoptions);
					}
				});
				c.show();
			}
		},
		close: function(c) {
			if (typeof c == 'undefined'){
				c = UAcontainer;
				if (!c){
					return;
				}
			}
			c.slideUp($.userApi.openCloseTime);
			$.userApi.isOpen = false;
			uh = $("#UA-header");
			uh.find(".uhcc").show();
			uh.find(".uhco").hide();
		},
		headerInited: false,
		initHeader: function(e) {
			ua = $("#"+$.userApi.containerId);
			ua.hide().addClass("userApi").html($.userApi.userApiContainerHtml);
			ua.find("a.UAclose").click($.userApi.colapse);
			
			var h = $("#UA-header");
			if (!this.headerInited){
				var dallsoverlay = $("<div />").attr("id", "UA-allsnacksbox-overlay");
				$("body").append(dallsoverlay);
				$("body").append($("#UA-allsnacksbox"));
			} else {
				h.find("#UA-allsnacksbox").remove();
			}
			//$("body").append($("#UAH-myacclinks"));
			
			h.find(".UA-logo i").click(function() {
	    		lel = $("#UA-header .UA-logo");
	    	    $("#UA-allsnacksbox").css({
	    	    	left: (lel.offset().left-5) + 'px',
	    	    	top: (lel.offset().top+10) + 'px'
	    	    });
	    		$("#UA-allsnacksbox").fadeIn("fast");
	    		$("#UA-allsnacksbox-overlay").show();
	    	});
			$("#UA-allsnacksbox .inf i, #UA-allsnacksbox-overlay").click(function(){
				$("#UA-allsnacksbox").fadeOut("fast");
				$("#UA-allsnacksbox-overlay").hide();
			});
			
			// old
			e.find("a").click(function(){
				if($(this).attr("href") == location.hash){
					if ($(window).scrollTop() > 0){
						ae = $.browser.safari ? $('body') : $('html'); 
						ae.animate({'scrollTop': 0}, 300);
					}
				}
			});
			$("#UAH-myacclinks").hover(
				function(){$(this).stop(true, true).fadeIn("fast");},
				function(){$(this).fadeOut("fast");}
			);
			e.find(".UA-myaccount h4").hover(
				function(){
					myacclinks = $("#UAH-myacclinks");
					var ptop = $("#UA-header").offset().top + 16;
					var roffset = $(window).width() - ($(this).offset().left+$(this).width()) - 38;
					myacclinks.css({
		    	    	right: roffset + 'px',
		    	    	top: ptop +'px'
		    	    });
					myacclinks.stop(true, true).fadeIn("fast");
				}
			);
			$("#UAH-myacclinks a").click(function(){
				$("#UAH-myacclinks").fadeOut("fast");
			});
			$("a").each($.userApi.rewriteLink);
			if (!$("#UAisLogged").val()){
				if ($.userApi.cookie('UAemail') && !$.userApi.remembermeCalled){
					$.userApi.remembermeCalled = true;
					var op = {
						page: 'auto-login',
						user: $.userApi.cookie('UAemail'),
						pass: $.userApi.cookie('UApass')
					};
					if (typeof UAcontainer == 'undefined'){
						$("<div />").userApi(op);
					} else {
						UAcontainer.userApi(op);
					}
				}
			}
			this.headerInited = true;
		},
		rewriteLink: function(){
			if (!this.host){
				return;
			}
			
			host = this.host.split(':')[0];
			if (host == window.location.host){
				return
			}
			
			validDomain = false;
			for (i in $.userApi.relatedDomains){
				if (host.indexOf($.userApi.relatedDomains[i]) != -1){
					validDomain = true;
					break;
				}
			}
			if (!validDomain){
				return;
			}
			href= $(this).attr("href").split('?');
			app = new Array();
			if(href[1]){
				params = href[1].split('&');
				for (j in params){
					pv = params[j].split('=');
					app[pv[0]] = (typeof pv[1] != "undefined") ? decodeURIComponent(pv[1]) : null; 
				}
			}
			if ($.userApi.cookie('UAuref')){
				app.uref = $.userApi.cookie('UAuref');
			} else {
				delete app.uref;
			}
			if (typeof $.userApi.sessionId != 'undefined' && $.userApi.sessionId != ''){
				app.UA_PHPSESSID = $.userApi.sessionId;
			} else {
				delete app.UA_PHPSESSID;
			}
			if ((typeof $.userApi.referralHash != 'undefiend') && $.userApi.referralHash != null && $.userApi.referralHash){
				app.ref = $.userApi.referralHash;
				if ($.userApi.referralDate){
					app.refDate = $.userApi.referralDate;
				}
			}
			
			stplus = '';
			for (i in app){
				if (stplus != ''){
					stplus += '&'; 
				} else {
					stplus += '?';
				}
				stplus += i + '=' + $.userApi.urlencode(app[i]);
			}
			$(this).attr("href", href[0] + stplus);
		},
		onSessionExpired: function() {
			if ($.userApi.cookie('UAemail')){
				$.userApi.cookie('UAemail', null, {path: '/'});
				$.userApi.cookie('UApass', null, {path: '/'});
			}
			location.href = $.userApi.sessionExpiredPage;
		},
		getTheVip: function(){
			if ($.userApi.isLogged()){
				$.userApi.addToCart('add_serv=vip-membership-yearly');				
			} else {
				var url = $.userApi.getCartUrl() + '&add_serv=vip-membership-yearly';
				$.userApi.openBuyPointsPopup(url);
			}
			return false;
		},
		getCartUrl: function(){
			var langPre = '';
			if (this.lang != 'en'){
				langPre = this.lang + '/';
			}
			return $.userApi.snacktoolsUrl + langPre + 'cart.html?UA_PHPSESSID=' + $.userApi.sessionId + '&terminal=' + $.userApi.terminal;
		},
		_initBuyPointsDialog: function(){
			if ($.userApi.dialogBuyPoints == null){
				pdialog = $("<div />").attr({id: 'UA_dialog_buypoints'});
				pdialog.dialog({
					modal: true,
					autoOpen: false,
					resizable: false,
					width: 673,
					minHeight: 300
				});
				
				pdial = pdialog.parent(); 
				pdial.attr({id: 'UA_dialog'});
				pdial.addClass('UAdialog');
				pdial.find(".ui-dialog-buttonpane button").addClass("button_cancel ua-b ua-b-gray");
				$.userApi.dialogBuyPoints = pdialog;
			}
		},
		addToCart: function(data, container, showBack){
			this.buyPointsShowBack = showBack;
			if (!container){
				this._initBuyPointsDialog();
			} else {
				this.buyPointsContType = 'cont';
				this.buyPointsCont = container; 
			}
			var pdialog = $.userApi.getBuyPointsCont();
			if (this.isBuyPointsDialog()){
				if (pdialog.dialog('isOpen')){
					this._onAddToCartOpen(data);
				} else {
					pdialog.unbind("dialogopen");
					pdialog.bind("dialogopen", function(event, ui) {
						$.userApi._onAddToCartOpen(data);
					});
					pdialog.dialog('open');
				}
			} else {
				this._onAddToCartOpen(data);
				if ($.userApi.dialogBuyPoints){
					$.userApi.dialogBuyPoints.dialog('close');
				}
			}
		},
		requestCoupon: function(coupon){
			this._requestCoupon(coupon);
		},
		buyPoints: function(points, op) {
			$.userApi._initBuyPointsDialog();
			var pdialog = $.userApi.dialogBuyPoints;
			pdialog.parent().find(".ui-dialog-titlebar .aback").remove();
			$.userApi.buyPointsOptions = op;
			
			if (pdialog.dialog('isOpen')){
				$.userApi._onDialogBuyPointsOpen(points, op);
			} else {
				pdialog.unbind("dialogopen");
				pdialog.bind("dialogopen", function(event, ui) {
					$.userApi._onDialogBuyPointsOpen(points, op);
				});
				pdialog.dialog('open');
			}
		},
		_selectedPayMethod: null,
		_onAddToCartOpen: function(data){
			var dial = this.getBuyPointsCont();
			dial.parent().find(".ui-dialog-titlebar .aback").remove();
			dial.html($.userApi._dialogGetLoader());
			var dataToSend = {page: 'cart', terminal: $.userApi.terminal, data: data, lang: $.userApi.lang};
			if (typeof $.userApi.sessionId != 'undefined' && $.userApi.sessionId != ''){
				dataToSend.PHPSESSID = $.userApi.sessionId;
			}
			if (typeof $.userApi.referralHash != 'undefiend'){
				dataToSend.referralHash = $.userApi.urlencode($.userApi.referralHash); 
			}
			
			$.ajax({
				url: $.userApi.localAjaxUrl,
				type: $.userApi.ajaxType,
				dataType: $.userApi.ajaxDataType,
				data: dataToSend,
				success: function(d){
					var pdialog = $.userApi.getBuyPointsCont();
					if (d.code == 200){
						pdialog.html(d.data.content);
						if (d.data.cartEmpty){
							$.userApi.buyPoints();
							$.userApi.disablePayment();
						} else {
							$.userApi.enablePayment();
						}
						pdialog.find("#UA-paymentForm").submit(function(){
							$.userApi.onBuyPoints();
							if ($.userApi.isBuyPointsDialog()){
								$.userApi.dialogBuyPoints.dialog('close');
							}
						});
						pdialog.find(".ihavediscount").click(function(){
							$(this).hide();
							var pdialog = $.userApi.getBuyPointsCont();
							pdialog.find("form.coupon_form").fadeIn("fast");
							return false;
						});
						pdialog.find("form.coupon_form a.closecoupon").click(function(){
							var pdial = $.userApi.getBuyPointsCont();
							pdial.find("form.coupon_form").hide();
							pdial.find(".ihavediscount").show();
							return false;
						});
						pdialog.find("form.coupon_form a.applycoupon").click(function(){
							var pdial = $.userApi.getBuyPointsCont();
							pdial.find("form.coupon_form").submit();
							return false;
						});
						pdialog.find("form.coupon_form").submit(function(){
							var pdial = $.userApi.getBuyPointsCont();
							var f = pdial.find("form.coupon_form");
							var c = f.find("#UA_coupon_number");
							if (c.val() == ''){
								$.userApi.getText('complete_your_coupon', function(text){
									f.find("#couponMessage").removeClass('cnot').addClass('cerr').html(text);
									f.find("#couponMessage").slideDown("fast");
								});
								return false;
							}
							$.userApi._requestCoupon(c.val());
							return false;
						});
						pdialog.dialog( "option", "title", d.data.popinTitle);
						pdialog.dialog( "option", "closeText", d.data.popinCloseText + ' X');
						
						pdialog.find("#UA-paymentForm .paymethod input[type='radio']").click(function(){
							$.userApi._selectedPayMethod = $(this).val();
						});
						if (!d.data.fullDiscount){
							var pm = $.userApi._selectedPayMethod;
							if (pm != null){
								var inp = pdialog.find("#UA-paymentForm .paymethod input[value='" + pm + "']");
								if (inp.length){
									inp.attr("checked", true);
								}
							}
						}
						/*if ($.userApi.isBuyPointsDialog() && $.userApi.buyPointsShowBack){
							$.userApi._showBackButton(pdialog, d.data.backText);
						}*/
						$.userApi._initCartProducts(d.data.cartEmpty);
					} else {
						pdialog.html(d.data);
					}
					
					if (d.data.confirmProduct){
						$.userApi._confirmAddProduct();
					}
				}
			});
		},
		_showBackButton: function(dial, text){
			pdialog.parent().find(".ui-dialog-titlebar .aback").remove();
			var aclose = dial.parent().find(".ui-dialog-titlebar .ui-dialog-titlebar-close");
			var aback = $('<a />').attr({
				'class': 'ui-dialog-titlebar-close aback ui-corner-all',
				'style': 'margin-right:8px;',
				'unselectable': 'on'})
				.html('<span>' + text + '</span>')
				.click(function(){
					location.href = '#st-buy-points-popin&mode=action';
					return false;
				});
			aclose.after(aback);
		},
		_requestCoupon : function(coupon){
			var dataToSend = {page: 'check-coupon', coupon_id: coupon, terminal: $.userApi.terminal, lang: $.userApi.lang};
			if (typeof $.userApi.sessionId != 'undefined' && $.userApi.sessionId != ''){
				dataToSend.PHPSESSID = $.userApi.sessionId;
			}
			var pdial = $.userApi.getBuyPointsCont();
			pdial.find(".ihavediscount").trigger('click');
			pdial.find("#UA_coupon_number").val(coupon);
			$.ajax({
				url: $.userApi.localAjaxUrl,
				type: $.userApi.ajaxType,
				dataType: $.userApi.ajaxDataType,
				data: dataToSend,
				success: function(d) {
					var pdial = $.userApi.getBuyPointsCont();
					if (d.code == 200){
						if (d.data.cartEmpty){
							$.userApi.buyPoints();
							$.userApi.disablePayment();
						} else {
							$.userApi.enablePayment();
						}
						pdial.find(".cart_products").html(d.data.cartProductsContent);
						if (d.data.fullDiscount == true){
							pdial.find("div.paymethod").hide();
							pdial.find("div.full_discount_order").show();
							pdial.find("#method_pbuy0").attr("checked", true);
						} else {
							pdial.find("div.paymethod").show();
							pdial.find("div.full_discount_order").hide();
							pdial.find("#method_pbuy1").attr("checked", true);
						}
						
						if (d.data.alreadyHaveProfile){
							$.userApi._confirmAddProduct();
						}
						$.userApi._initCartProducts();
						pdial.find("#couponMessage").removeClass('cerr').addClass('cnot').html(d.data.message);
						pdial.find("#couponMessage").slideDown("fast");
					} else {
						if (d.code == 501){
							$.userApi.goToLogin();
						}
						pdial.find("#couponMessage").html(d.data);
						pdial.find("#couponMessage").removeClass('cnot').addClass('cerr').slideDown("fast");
					}
				}
			});
		},
		_initCartProducts: function(){
			var pdialog = $.userApi.getBuyPointsCont();
			pdialog.find("#serviceSelect").change(function(){
				$.userApi.addToCart('add_serv=' + $.userApi.urlencode($(this).val()) + '&no_confirm=1');
				return false;
			});
			pdialog.find("#UA_cart_product_price input").click(function(){
				$.userApi.addToCart('add_serv=' + $.userApi.urlencode($(this).val())+ '&no_confirm=1');
				return false;
			});
			pdialog.find("#UA_cart_product_name i").tooltip({content: $('#UAcart-tooltip-content'), width: 470});
			if (typeof UA_onAddToCart == 'function'){
				UA_onAddToCart();
			}
		},
		disablePayment: function()
		{
			var bc = $.userApi.getBuyPointsCont();
			e = bc.find(".paymentSelectors");
			e.find("input").attr("disabled", true);
			e.addClass("paymentInactive");
		},
		enablePayment: function()
		{
			var bc = $.userApi.getBuyPointsCont();
			e = bc.find(".paymentSelectors");
			e.find("input").attr("disabled", false);
			e.removeClass("paymentInactive");
		},
		_confirmAddProduct: function(){
			$.userApi.getText('overwrite_subscription', function(text){
				if (!confirm(text)){
					if ($.userApi.isBuyPointsDialog()){
						$.userApi.dialogBuyPoints.dialog('close');
					} else {
						location.href = $.userApi.getLangPre() + '/';
					}
				}
			});
		},
		getText: function(index, callback){
			if (typeof callback != 'function'){
				return;
			}
			
			dataToSend = {page: 'get-text', index: index, lang: $.userApi.lang};
			if (typeof $.userApi.sessionId != 'undefined' && $.userApi.sessionId != ''){
				dataToSend.PHPSESSID = $.userApi.sessionId;
			}
			
			$.ajax({
				callback: callback,
				url: $.userApi.localAjaxUrl,
				type: $.userApi.ajaxType,
				dataType: $.userApi.ajaxDataType,
				data: dataToSend,
				success: function(d){
					if (d.code == 200){
						this.callback(d.data);
					}
				}
			});
		},
		_onDialogBuyPointsOpen: function(points, op){
			var ppointsDialog = points;
			var dial = $.userApi.dialogBuyPoints;
			dial.html($.userApi._dialogGetLoader());
			dataToSend = {page: 'buy-points-popin', terminal: $.userApi.terminal, points: ppointsDialog, lang: $.userApi.lang};
			if (typeof $.userApi.sessionId != 'undefined' && $.userApi.sessionId != ''){
				dataToSend.PHPSESSID = $.userApi.sessionId;
			}
			if (typeof stTrackingSystem != 'undefined'){
				dataToSend.stTrackingSystem = stTrackingSystem;
			}
			if (typeof stTrackingObjectSystem != 'undefined'){
				dataToSend.stTrackingObjectSystem = stTrackingObjectSystem;
			}
			$.ajax({
				url: $.userApi.localAjaxUrl,
				type: $.userApi.ajaxType,
				dataType: $.userApi.ajaxDataType,
				data: dataToSend,
				success: function(d){
					if (d.code == 200){
						pdialogData = d.data;
						pdialog = $.userApi.dialogBuyPoints;
						pdialog.html(d.data.content);
						pdialog.dialog( "option", "title", d.data.popinTitle );
						pdialog.dialog( "option", "closeText", d.data.popinCloseText + ' X');
						pdialog.find(".buypointsformnormal a.buyPointsLeft").click(function(){
							pdialog.find("form.buypointsformnormal").submit();
							return false;
						});
						pdialog.find("a.createsubscription").click(function(){
							pdialog.find("form.buypointsformrecursive").submit();
							return false;
						});
						pdialog.find("form.buypointsformnormal").submit(function(){$.userApi.onSubmitBuyPointsForm($(this), true); return false;});
						pdialog.find("form.buypointsformrecursive").submit(function(){$.userApi.onSubmitBuyPointsForm($(this), true); return false;});
						pdialog.find("form.buymorepointsform").submit(function(){
							var pBuy = parseInt($(this).find("#selpoints").val());
							var cerr = $(this).find(".uaerr");
							cerr.hide();
							var errMsg = null;
							if (isNaN(pBuy) || pBuy < pdialogData.minPoints){
								$.userApi.getText('buy_min_points_message', function(text){
									var cerr = $.userApi.dialogBuyPoints.find(".uaerr");
									cerr.html(text);cerr.fadeIn("fast");
								});
								return false;
							} else if (pBuy > pdialogData.maxPoints){
								$.userApi.getText('buy_max_points_message', function(text){
									var cerr = $.userApi.dialogBuyPoints.find(".uaerr");
									cerr.html(text);cerr.fadeIn("fast");
								});
								return false;
							}
							$.userApi.onSubmitBuyPointsForm($(this), true);
							return false;
						});
						var ltback = d.data.backText;
						pdialog.find("a.specify_larger_amount").click(function(){
							pdialog.find(".buypointspart").hide();
							pdialog.find(".buymorepointspart").fadeIn("fast");
							$.userApi._showBackButton(pdialog, ltback);
							return false;
						});
						if ($.userApi.buyPointsOptions && $.userApi.buyPointsOptions.openSuccess && typeof $.userApi.buyPointsOptions.openSuccess == 'function'){
							$.userApi.buyPointsOptions.openSuccess(pdialog);
						}
					} else {
						pdialog.html(d.data);
					}
				}
			});
		},
		_dialogGetLoader: function(){
			var loaderWhiteSrc = $.userApi.apiUrl + 'images/ajax-loader-white-big.gif?v2';
			return $("<img />").attr({src: loaderWhiteSrc}).css({margin: '0 auto', 'padding': '159px 0', display: 'block'});
		},
		buyPointsOptions: {},
		onSubmitBuyPointsForm: function(f, showBack){
			showBack = !!showBack;
			if ($.userApi.isLogged() || !$.userApi.isBuyPointsDialog()){
				$.userApi.addToCart(f.serialize(), null, true);
			} else {
				var url = f.attr("action") + '?' + f.serialize() + '&terminal=' + $.userApi.terminal;
				if ($.userApi.dialogBuyPoints != null){
					$.userApi.dialogBuyPoints.dialog('close');
				}
				$.userApi.openBuyPointsPopup(url);
			}
			return false;
		},
		openBuyPointsPopup: function(url) {
			if (typeof UACartWindow != 'undefined'){
				UACartWindow.close();
			}
			if ($.userApi.referralHash != null){
				url += '&ref=' + $.userApi.referralHash;
				if ($.userApi.referralDate != null){
					url += '&refDate=' + $.userApi.referralDate;
				}
			}
			if ($.userApi.cookie('__utma')) {
				url += '&__utma=' + $.userApi.urlencode($.userApi.cookie('__utma'));
			}
			if ($.userApi.cookie('__utmb')) {
				url += '&__utmb=' + $.userApi.urlencode($.userApi.cookie('__utmb'));
			}
			if ($.userApi.cookie('__utmc')) {
				url += '&__utmc=' + $.userApi.urlencode($.userApi.cookie('__utmc'));
			}
			if ($.userApi.cookie('__utmz')) {
				url += '&__utmz=' + $.userApi.urlencode($.userApi.cookie('__utmz'));
			}
			if ($.userApi.cookie('__utmv')) {
				url += '&__utmv=' + $.userApi.urlencode($.userApi.cookie('__utmv'));
			}
			if ($.userApi.cookie('__utmx')) {
				url += '&__utmx=' + $.userApi.urlencode($.userApi.cookie('__utmx'));
			}
			UACartWindow = window.open(url, 'Snacktools');
			$.userApi.onBuyPoints();
		},
		loadCss: function(filename) {
			if (jQuery.browser.msie) {
				var fileref=document.createElement("link");
				fileref.setAttribute("rel", "stylesheet");
				fileref.setAttribute("type", "text/css");
				fileref.setAttribute("href", filename);
				document.body.appendChild(fileref);
			} else {
			jQuery(document.createElement("link"))
				.attr({type: "text/css",href: filename ,rel:"stylesheet"})
					.appendTo("head");
			}
		},
		onBuyPoints: function() {
			clearInterval($.userApi.onBuyPointsTimeout);
			$.userApi.onBuyPointsTimeout = setInterval($.userApi.reloadPoints, $.userApi.onBuyPointsInterval);
		},
		reloadPoints: function() {
			dataToSend = {page: 'reload_points', terminal: $.userApi.terminal, lang: $.userApi.lang};
			if (typeof $.userApi.sessionId != 'undefined' && $.userApi.sessionId != ''){
        		dataToSend.PHPSESSID = $.userApi.sessionId;
			}
			$.ajax({
				url: $.userApi.localAjaxUrl,
				type: $.userApi.ajaxType,
				dataType: $.userApi.ajaxDataType,
				data: dataToSend,
				success: function(d){
					if (d.code == 200){
						oldPoints = $("#UAH-ptocheck").val();
						$("#UAH-points-container").html(d.data.display);
						var a = $("#UA-header .UAHpointsinfo");
						if (d.data.premium){
							a.attr("href", "#st-order-history").text("VIP");
						} else {
							if (d.data.total_points > 0){
								a.attr("href", "#st-order-history");
							} else {
								a.attr("href", "#st-buy-points-popin&mode=action");
							}
							a.find("span").text(d.data.total_points);
						}
						if (oldPoints != $("#UAH-ptocheck").val()){
							if (typeof UA_onChangePoints == 'function'){
								UA_onChangePoints(d.data.premium, d.data.total_points);
							}
							clearInterval($.userApi.onBuyPointsTimeout);
						}
					}
				}
			});
		},
		replaceApiHeader: function(d) {
			$("#UA-header").html(d);
			$.userApi.initHeader($("#UA-header"));
		},
		analyticsDomainCheck: function(d) {
			$.each($.userApi.relatedDomains, function(index, value) {
				if ((document.domain != value) && ((document.domain).substring(4) != value)
						&& (d.attr('rev') != 'jmphandled')
						&& (typeof (d.attr('href')) != 'undefined')
						&& (d.attr('href').indexOf('http://www.' + value) == 0 
								|| d.attr('href').indexOf('https://www.' + value) == 0
								|| d.attr('href').indexOf('http://' + value) == 0 
								|| d.attr('href').indexOf('https://' + value) == 0))
				{
					d.click(function() {
						$.userApi.analyticsGoToRelatedDomain(this.href,this.target);
						return false;
					});
				}
			});
		},
		getUrlVars: function() {
			/* @TODO mai frumos codu de mai jos */
			var vars = [], hash;
			var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1);
			var hashes = hashes.split('#');
			var hashes = hashes[0];
			var hashes = hashes.split('&');
			
			for(var i = 0; i < hashes.length; i++) {
				hash = hashes[i].split('=');
				vars.push(hash[0]);
				vars[hash[0]] = hash[1];
			}
			return vars;
		},
		cookie: function(name, value, options) {
		    if (typeof value != 'undefined') { // name and value given, set cookie
		        options = options || {};
		        if (value === null) {
		            value = '';
		            options.expires = -1;
		        }
		        var expires = '';
		        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
		            var date;
		            if (typeof options.expires == 'number') {
		                date = new Date();
		                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
		            } else {
		                date = options.expires;
		            }
		            expires = '; expires=' + date.toUTCString();
		        }
		        var path = options.path ? '; path=' + (options.path) : '';
		        var domain = options.domain ? '; domain=' + (options.domain) : '';
		        var secure = options.secure ? '; secure' : '';
		        document.cookie = [name, '=', $.userApi.urlencode(value), expires, path, domain, secure].join('');
		    } else { // only name given, get cookie
		        var cookieValue = null;
		        if (document.cookie && document.cookie != '') {
		            var cookies = document.cookie.split(';');
		            for (var i = 0; i < cookies.length; i++) {
		                var cookie = jQuery.trim(cookies[i]);
		                // Does this cookie string begin with the name we want?
		                if (cookie.substring(0, name.length + 1) == (name + '=')) {
		                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
		                    break;
		                }
		            }
		        }
		        return cookieValue;
		    }
		},
		analyticsGoToRelatedDomain: function(href, target) {
			var i = 'ST-AnalyticsForm';
			$('#'+i).remove();
			$('<form/>').hide().appendTo('body').attr('id', i);
			$('#'+i).attr('action', href);
			$('#'+i).attr('method', 'POST');
			if (target) {
				$('#'+i).attr('target', target);
			}
			if ($.userApi.cookie('__utma')) {
				$('<input>').appendTo('#'+i).attr('name', '__utma').val($.userApi.cookie('__utma'));
			}
			if ($.userApi.cookie('__utmb')) {
				$('<input>').appendTo('#'+i).attr('name', '__utmb').val($.userApi.cookie('__utmb'));
			}
			if ($.userApi.cookie('__utmc')) {
				$('<input>').appendTo('#'+i).attr('name', '__utmc').val($.userApi.cookie('__utmc'));
			}
			if ($.userApi.cookie('__utmz')) {
				$('<input>').appendTo('#'+i).attr('name', '__utmz').val($.userApi.cookie('__utmz'));
			}
			if ($.userApi.cookie('__utmv')) {
				$('<input>').appendTo('#'+i).attr('name', '__utmv').val($.userApi.cookie('__utmv'));
			}
			if ($.userApi.cookie('__utmx')) {
				$('<input>').appendTo('#'+i).attr('name', '__utmx').val($.userApi.cookie('__utmx'));
			}
			if (typeof(stTrackingSystem)!='undefined') {
				$("<input>").appendTo('#'+i).attr('name', 'stTrackingSystem').val(stTrackingSystem);
			}
			if (typeof(stTrackingObjectSystem)!='undefined') {
				$("<input>").appendTo('#'+i).attr('name', 'stTrackingObjectSystem').val(stTrackingObjectSystem);
			}
			$('#'+i).submit();
		},
		konami: function (event){
			if(event.keyCode == $.userApi.konamiparams.code[$.userApi.konamiparams.step]) {
				$.userApi.konamiparams.step++;
	        } else {
	        	$.userApi.konamiparams.step     = 0;
	        }
			
	        if($.userApi.konamiparams.step == $.userApi.konamiparams.code.length) {
	        	$.userApi.konamiparams.step     = 0;
	        	dataToSend = {page: 'konami', terminal: $.userApi.terminal, lang: $.userApi.lang};
	        	if (typeof $.userApi.sessionId != 'undefined' && $.userApi.sessionId != ''){
	        		dataToSend.PHPSESSID = $.userApi.sessionId;
				}
	        	$.ajax({
					url: $.userApi.localAjaxUrl,
					type: $.userApi.ajaxType,
					dataType: $.userApi.ajaxDataType,
					data: dataToSend,
					success: function(d){
						if (d.data.redirect == true){
							location.href = d.data.href;
						} else {
							alert(d.data);
						}
					}
				});
	        }
		},
		checkSessionStatus: function () {
			dataToSend = {page: 'check-session', terminal: $.userApi.terminal, lang: $.userApi.lang};
        	if (typeof $.userApi.sessionId != 'undefined' && $.userApi.sessionId != ''){
        		dataToSend.PHPSESSID = $.userApi.sessionId;
			} else {
				return;
			}
        	$.ajax({
				url: $.userApi.localAjaxUrl,
				type: $.userApi.ajaxType,
				dataType: $.userApi.ajaxDataType,
				data: dataToSend,
				success: function(d){
					if (d.data.expired){
						$.userApi.replaceApiHeader(d.data.header);
						$.userApi.onSessionExpired();
						$.userApi.colapse();
						if (!d.data.logged){
							$.userApi.sessionId = '';
						}
					}
				}
			});
		},
		isLogged: function(){
			return !!$.userApi.sessionId;
		},
		preloadImage: function(src){
			var img = new Image();
			img.src = $.userApi.apiUrl + 'images/' + src;
		},
		isBuyPointsDialog: function(){
			return (this.buyPointsContType == 'dialog');
		},
		getBuyPointsCont: function(){
			if (this.isBuyPointsDialog()){
				return this.dialogBuyPoints;
			} else {
				return this.buyPointsCont;
			}
		},
		userApiContainerHtml: '',
		konamiparams: { 'code' : [38, 38, 40, 40, 37, 39, 37, 39, 66, 65], 'step' : 0},
		isOpen: false,
		colapsed: false,
		referralHash: null,
		referralDate: null,
		inited: false,
		onBuyPointsInterval: 5000,
		onBuyPointsTimeout: null,
		konamiInited: false,
		dialogBuyPoints: null,
		buyPointsContType: 'dialog',
		buyPointsCont: null,
		buyPointsShowBack: false,
		externLoginFrom: 'header',
		logged: false,
		autoLogging: false,
		remembermeCalled: false,
		checkSessionStatusTimeout: 60 // seconds
	};
	
	$.fn.userApi = function (options){
			var container = this;
			UAcontainer = container;
			var defaults = {showLoader: true};
			
			options = $.extend(UAoptions, options);
			var o = $.extend(defaults, options);
			UAoptions = o;
			
			o.validS = { email: false, screenname: false, psw1: false, psw2: false };

			if ($.userApi.inited == false){
				_init(); $.userApi.inited = true;
			}
			
			//called only one time
			function _init() {
				var pcstartX = null;
				var pcstartY = null;
				var pcexec = false;
				container.mousedown(function(ev){
					if (ev.button == 2){
						pcexec = true;
						pcstartY = ev.pageY;
						pcstartX = ev.pageX;
					}
				});
				container.mouseup(function(ev){
					if (pcexec == true){
						pcexec = false;
						if (ev.pageY > pcstartY){
							return;
						}
						pcdifx = Math.abs(pcstartX - ev.pageX);
						if (pcdifx > 50) {
							return;
						}
						pcdify = pcstartY - ev.pageY;
						if (pcdify < 21){
							return;
						}
						$.userApi.colapse();
						return false;
					}
				});
			}
			
			if (o.mode && o.mode == 'action'){
				switch(o.page){
					case 'buy-points-popin':
						$.userApi.colapse();
						var points = o.points && o.points > 0 ? o.points : 0;
						$.userApi.buyPoints(points);
						return;
						break;
				}
			}
			var notUAOpenPages = ['logout', 'check-login', 'set-session', 'auto-login', 'login', 'signup',
			                      'login', 'signup', 'forgot-password', 'get-the-vip', 'add-coupon', 'add-serv'];
			if ($.inArray(o.page, notUAOpenPages) < 0){
				al = getAjaxLoader();
				al.css({display: 'block', margin: '-16px auto -16px auto', position: 'absolute', top: '50%', left: '50%'});
				container.find("div.userApiContainer").html(al);
				if ($.userApi.isOpen == false){
					return $.userApi.open(container);
				}
				if ($(window).scrollTop() > 0){
					ae = $.browser.safari ? $('body') : $('html'); 
					ae.animate({'scrollTop': 0}, 300);
				}
			}
			
			if ($.userApi.onBuyPointsTimeout != null){
				clearInterval($.userApi.onBuyPointsTimeout)
			}
			switch(o.page){
				default:
					ajax({
						success: function(d) {
							if (d.code == 200){
								containerHtml(d.data);
							} else {
								err(d.data);
							}
						}
					});
					break;
					
				case 'get-the-vip':
					$.userApi.colapse();
					$.userApi.getTheVip();
					return;
				case 'point-history':
					pointsHistory();
					break;
					
				case 'auto-login':
					autoLogin();
					break;
					
				case 'login':
				case 'signup':
				case 'forgot-password':
					getLoginAndSignupPage();
					return;
					break;
				
				case 'check-login':
					checkLogin();
					break;
					
				case 'account-options':
					getAccountOptions();
					break;
					
				case 'change-password':
					getChangePassword();
					break;
					
				case 'order-history':
					getOrders();
					break;
					
				case 'logout':
					logout();
					break;
					
				case 'add-coupon':
				case 'add-serv':
					addCouponOrServ();
					break;
					
			};
			
			// add coupon
			function addCouponOrServ()
			{
				if ($.userApi.sessionId && (o.coupon || o.serv)){
					cartRedirect();
					return;
				}
				if ((!o.coupon && !o.serv) || $.userApi.isLoginPage()){
					return;
				}
				var redir = $.userApi.loginPage + '#st-' + o.page;
				if (o.serv){
					redir += '&serv=' + o.serv;
				}
				if (o.coupon){
					redir += '&coupon=' + o.coupon;
				}
				location.href = redir;
			}
			
			// auto login
			function autoLogin()
			{
				$.userApi.autoLogging = true;
				ajax({
					data: {user: o.user, pass: o.pass},
					complete: function(d){
						$.userApi.autoLogging = false;
						if (typeof UA_onAutoLoginEnd == 'function'){
							UA_onAutoLoginEnd(d);
						}
					},
					success: function(d) {
						if (d.data.logged == true){
							onLogin(d.data);
						} else {
							$.userApi.replaceApiHeader(d.data.header);
							$.userApi.cookie("UAemail", null, {path: '/'});
							$.userApi.cookie("UApass", null, {path: '/'});
						}
					}
				});
			}
			
			function onLogin(data, dontClose)
			{
				$.userApi.sessionId = data.PHPSESSID;
				
				if (data.header){
					$.userApi.replaceApiHeader(data.header);
				}
				
				if (data.rememberme) {
					$.userApi.cookie('UAemail', data.email, {expires: 365, path: '/'});
					$.userApi.cookie('UApass', data.pass, {expires: 365, path: '/'});
				}
				
				if (o.coupon || o.serv){
					cartRedirect();
					return;
				}
				
				if (typeof UA_onLogin == 'function'){
					UA_onLogin(data.PHPSESSID);
				}
				
				if (o.next){
					location.href = '#'+o.next;
				} else if (!dontClose) {
					$.userApi.colapse();
				}
			};
			
			function cartRedirect()
			{
				var redir = $.userApi.getCartUrl();
				if (o.coupon){
					redir += '&coupon=' + o.coupon;
				}
				if (o.serv){
					redir += '&add_serv=' + o.serv;
				}
				location.href = redir;
				return;
			};

			//points history
			function pointsHistory()
			{
				ajax({
					success: function(d) {
						if (d.code == 200){
							containerHtml(d.data);
							od = container.find("div.scrolltable");
							os = od.find(".scroller");
							ot = os.find("table");
							if (od.height() >= ot.height()){
								if (ot.length > 0){
									ot.find("td.last").addClass("noscrool");
								}
								od.css("height", "auto");
								od.find(".scroller").css("height", "auto");
							} else {
								os.jScrollPane({
									animateTo:false,
									scrollbarMargin: 0,
									scrollbarWidth: 13,
									showArrows:true
								});
							}
							
						} else {
							err(d.data);
						}
					}
				});
			};
			
			function initForgotPassword(){
				var einp = fpForm.find("input[name='email']");
				einp.focus(onInputFocus).blur(onEmailBlur);
				fpForm.submit(function(){
					var f = $(this);
					f.find("div.uaerr").hide(); f.find("div.uanotice").hide();
					em = f.find("input[name='email']").val();
					if (!validEmail(em)) {
						getText('invalid_email_address', function(text){
							f.find("div.uaerr").html(text).fadeIn("fast");
						});
						return false;
					}
					f.find("input").attr("disabled", true);
					
					but = f.find("a.recoverPasswordButton");
					lb = showLoaderButton(but, 'black');
					f.find("div.uaerror").hide();
					f.find("div.uanotice").hide();
					
					ajax({
						data: {page: 'forgot-password-send-mail', email: em },
						complete: function(){
							f.find("input").attr("disabled", false);
							lb.remove(); but.show();
						},
						success: function(d) {
							if (d.code == 200){
								f.find("div.uanotice").html(d.data).fadeIn("fast");
								f.find("#UAfpemail").val("");
							} else {
								f.find("div.uaerr").html(d.data).fadeIn("fast");
							}
						}
					});
					return false;
				});
			}
			
			//tryLogin
			function checkLogin()
			{
				opened = $.userApi.isOpen;
				var dtosend = {page: 'check-login', isOpen: opened};
				if (o.rememberme){
					dtosend.rememberme = 1;
				}
				ajax({
					data: dtosend,
					success: function(d) {
						if (d.data.logged == true){
							onLogin(d.data, true);
						}
					}
				});
			}
			
			//orders
			function getOrders(){
				ajax({
					data: {page: 'order-history'},
					success: function(d) {
						containerHtml(d.data);
						od = container.find("div.scrolltable");
						os = od.find(".scroller");
						ot = os.find("table");
						if (od.height() >= ot.height()){
							if (ot.length > 0){
								ot.find("td.last").addClass("noscroll");
							}
							od.css("height", "auto");
							od.find(".scroller").css("height", "auto");
						} else {
							os.jScrollPane({
								animateTo:false,
								scrollbarMargin: 0,
								scrollbarWidth: 13,
								showArrows:true
							});
						}
						
						ot.find("td.order_id input").each(function(){
							$(this).click(function(){
								$(this).select();
								$(this).removeClass("selected");
								$(this).addClass("selected");
							});
							$(this).blur(function(){
								td = $(this).parent();
								td.find("input").hide();
								td.find("div").fadeIn("fast");
								$(this).removeClass("selected");
							});
							td = $(this).parent();
							td.hover(
								function(){
									$(this).find("div").hide();
									$(this).find("input").stop(true,true).fadeIn("fast");
								},
								function(){
									if (!$(this).find("input").hasClass("selected")){
										$(this).find("input").hide();
										$(this).find("div").stop(true,true).fadeIn("fast");
									}
								}
							);
						});
						
						container.find("p.cancelRecurringProfile a").click(function() {
							getText('cancel_your_profile', function(text){
								if (confirm(text)){
									cancelRecurringProfile();	
								}
							});
							return false;
						});
					}
				});
			}
			
			function cancelRecurringProfile(){
				ajax({
					data: {page: 'cancel-recurring-profile'},
					success: function(d) {
						if (d.code == 200){
							if (typeof UA_onCancelProfile == 'function'){
								UA_onCancelProfile();
							}
							container.find("p.cancelRecurringProfile").remove();
							$.userApi.reloadPoints();
						}
					}
				});
			}
			
			//update password
			
			function getChangePassword(){
				ajax({
					data: {page: 'change-password-html'},
					success: function(d) {
						containerHtml(d.data);
						changePasswordInit();
					}
				});
			}
			changePasswordForm = null;
			cpErrorMessage = null;
			function changePasswordInit(){
				
				function checkOldPassword(submit)
				{
					cerr = cpErrorMessage.find(".err1");
					cerr.hide();
					v = changePasswordForm.find("input[name='password1']").val();
					if (submit != true && v == ''){
						changePasswordValid.oldPassword = false;
						return false;
					}
					ajax({
						data: {page: 'check-old-password', password: v},
						success: function(d){
							if (d.data.valid == false){
								changePasswordValid.oldPassword = false;
								cerr.html(d.data.message).fadeIn("fast");
							} else {
								changePasswordValid.oldPassword = true;
								if (submit == true){
									changePasswordForm.submit();
								}
							}
						}
					});
				}
				
				function checkNewPasswordLength(submit)
				{
					cerr = cpErrorMessage.find(".err2");
					cerr.hide();
					
					v = changePasswordForm.find("input[name='password2']").val();
					if (submit != true && v == ''){
						changePasswordValid.newPasswordLength = false;
						return false;
					}
					
					if (v.length < 4){
						changePasswordValid.newPasswordLength = false;
						getText('password_to_short', function(text){
							cerr = cpErrorMessage.find(".err2");
							cerr.html(text).fadeIn("fast");
						});
					} else {
						changePasswordValid.newPasswordLength = true;
						if (submit == true){
							changePasswordForm.submit();
						}
					}
				}
				
				function checkNewPasswordMatch(submit)
				{
					cerr = cpErrorMessage.find(".err3");
					cerr.hide();
					
					v = changePasswordForm.find("input[name='password3']").val();
					v1 = changePasswordForm.find("input[name='password2']").val(); 
					if (submit != true && v == ''){
						changePasswordValid.newPasswordMatch = false;
						return false;
					}
					
					if (v != v1){
						changePasswordValid.newPasswordMatch = false;
						getText('passwords_not_match', function(text){
							cerr = cpErrorMessage.find(".err3");
							cerr.html(text).fadeIn("fast");
						});
					} else {
						changePasswordValid.newPasswordMatch = true;
						if (submit == true){
							changePasswordForm.submit();
						}
					}
					
				}
				
				changePasswordForm = container.find("form.UAchangePasswordForm"); 
				changePasswordForm.find("a.updatePasswordButton").click(function(){
					changePasswordForm.submit();
					return false;
				});
				cpErrorMessage = container.find("div.cpErrorMessage");
				
				changePasswordForm.find("input[name='password1']").blur(checkOldPassword);
				changePasswordForm.find("input[name='password2']").blur(checkNewPasswordLength);
				changePasswordForm.find("input[name='password3']").blur(checkNewPasswordMatch);
				
				var changePasswordValid = {
					oldPassword: false,
					newPasswordLength: false,
					newPasswordMatch:false
				};
				changePasswordForm.submit(function() {
					
					changePasswordForm.find(".uanotice").hide();
					if (changePasswordValid.oldPassword == false){
						checkOldPassword(true); return false;
					}
					
					if (changePasswordValid.newPasswordLength == false){
						checkNewPasswordLength(true); return false;
					}
					
					if (changePasswordValid.newPasswordMatch == false){
						checkNewPasswordMatch(true); return false;
					}
					
					f = changePasswordForm;
					p = f.find("#password1");
					np1 = f.find("#password2");
					np2 = f.find("#password3");
					
					datatosend = f.serialize();
					f.find("input").each(function(){
						$(this).attr("disabled", true);
					});
					but = f.find("a.updatePasswordButton");
					lb = showLoaderButton(but, 'black');
					
					ajax({
						data: {	page: 'update_password', 
								current_password: p.val(),
								new_password1: np1.val(),
								new_password2: np2.val()
						},
						complete: function() {
							f.find("input").each(function(){
								$(this).attr("disabled", false);
							});
							lb.remove(); but.show();
						},
						success: function(d) {
							if (d.code == 200){
								f.find(".uanotice").html(d.data).fadeIn("fast");
								if (typeof UA_onPasswordChange == 'function'){
									UA_onPasswordChange();
								}
							} else {
								err(d.data);
							}
							f.find("input[type='password']").each(function() {
								$(this).val("");
							});
							changePasswordValid.oldPassword = false;
							changePasswordValid.newPasswordLength = false;
							changePasswordValid.newPasswordMatch = false;
						}
					});
					return false;
				});
			}
			
			//account information
			
			function getAccountOptions(){
				ajax({
					data: {page: 'account-options'},
					success: function(d) {
						containerHtml(d.data);
						userInfoInit();
					}
				});
			}
			
			function userInfoInit()
			{
				container.find("form.UAaccountOptionsForm a.deleteAccount").click(function(){
					getText('delete_account_notice', function(text){
						if (confirm(text)){
							deleteAccount();
						}
					});
					return false;
				});
				var clip = new UAClipboard.Client();
				clip.setHandCursor(true);
				clip.setText(container.find("#UAacchash").val());
				clip.glue('UAaccopy');
				clip.addEventListener('mouseDown', function(client){
					var obj = $(client.domElement).parent().find('i');
					setTimeout(function(){showCopiedMessage(obj, $(client.domElement));}, 150);
					setTimeout(function(){hideCopiedMessage(obj, $(client.domElement));}, 5000);
				});
				function showCopiedMessage(obj, el){obj.show(); el.hide()};
				function hideCopiedMessage(obj, el){obj.hide(); el.show()};
				
				container.find('#UAaccopy').click(function(){
					return false;
				});
				
				container.find("form.UAaccountOptionsForm").submit(function(){
					f = $(this);
					s = f.find("#screenname");
					
					errCont = f.find(".uaerr"); errCont.hide();
					notCont = f.find(".uanotice"); notCont.hide();
					
					datatosend = f.serialize();
					f.find("input").each(function(){
						$(this).attr("disabled", true);
					});
					but = f.find("a.updateAccountButton");
					lb = showLoaderButton(but, 'black');
					ajax({
						data: {page: 'update_account_information', data: datatosend},
						complete: function() {
							f.find("input").each(function(){
								$(this).attr("disabled", false);
							});
							f.find("input[name='email']").attr("disabled", true);
							lb.remove(); but.show();
							s.focus();
						},
						success: function(d) {
							if (d.code == 200){
								notCont.html(d.data.message).fadeIn("fast");
								$("#UAH-myacclinks h4 strong").text(d.data.name);
								$("#UA-header .UA-myaccount h4 strong").text(d.data.name);
							} else {
								errCont.html(d.data).fadeIn("fast");
							}
						}
					});
					return false;
				});
			}
			
			function deleteAccount()
			{
				ajax({
					data: {page: 'delete-account'},
					success: function(d) {
						if (d.code == 200){
							applyLogout(d);
						}
					}
				});
			}
			
			function applyLogout(d)
			{
				$.userApi.close(container);
				$.userApi.colapsed = false;
				
				$.userApi.cookie('UAemail', null, {path: '/'});
				$.userApi.cookie('UApass', null, {path: '/'});
				
				if (typeof UA_onLogout == 'function'){
					UA_onLogout();
				}
				$.userApi.sessionId = '';
				$.userApi.replaceApiHeader(d.data.header);
				location.href = '#';
			}
			
			//texts
			
			function getText(index, callback)
			{
				$.userApi.getText(index, callback);
			}
			
			//load login
			var lsTexts = {};
			function getLoginAndSignupPage(){
				ajax({
					data: {page: 'login-signup'},
					success: function(d) {
						if (d.data.logged == true){
							onLogin(d.data, true);
						} else if (d.code == 200){
							lsTexts = d.data.texts;
							containerHtml(d.data);
						} else {
							err(d.data);
						}
					}
				});
			};
			
			//logout
			function logout(){
				ajax({
					data: {page: 'logout'},
					success: function(d) {
						applyLogout(d);
					}
				});
			}
			
			//login signup
			
			var signUpForm = null;
			var loginForm = null;
			var fpForm = null;
			var fpForm = null;
			var changingTabs = false;
			var lastTab = null;
			
			function loginSignupInit(){
				lastTab = null;
				signUpForm = container.find("form.UAsignup_form");
				loginForm = container.find("form.UAlogin_form");
				fpForm = container.find("form.UAforgotpassword_form");
				
				var lcheck = container.find("#UAlogintab");
				var scheck = container.find("#UAsignuptab");
				
				if (o.page && o.page == 'login'){
					lcheck.attr("checked", true);
					loginForm.show();
					lastTab = loginForm;
				} else if(o.page == 'forgot-password'){
					lcheck.attr("checked", true);
					fpForm.show();
					lastTab = fpForm;
				} else {
					scheck.attr("checked", true);
					signUpForm.show();
					lastTab = signUpForm;
				}
				
				if (o.showContinueTitle){
					var h1t = lsTexts.sign_in_register_to_continue;
				} else {
					if (o.page == 'signup'){
						var h1t = lsTexts.register;
					} else {
						var h1t = lsTexts.sign_in;
					}
				}
				if (h1t){
					var tdiv = $("<div />").attr("id", "UAloginSignupTitle");
					if ($.browser.msie && $.browser.version < 9){
						tdiv.addClass("ie_suje");
					}
					tdiv.html('<h1>' + h1t + '</h1>');
					container.prepend(tdiv);
				}
				
				loginForm.find(".UAfplink").click(function(){
					slShowTab(fpForm, lsTexts.sign_in);
					return false;
				});
				
				lcheck.click(function(){
					slShowTab(loginForm, lsTexts.sign_in);
				});
				scheck.click(function(){
					slShowTab(signUpForm, lsTexts.register);
				});
				
				initSignUp();
				initLogin();
				initForgotPassword();
				
				var e = container.find(".UALoginSignup");
				e.find(".UAlogwith a").click(function(){
					$.userApi.externLoginFrom = 'login';
					e.find(".UALSleft div.uaerr").remove();
				});
				e.find("a.UAfacebookIcon").click($.userApi.showFacebookPopin);
				e.find("a.UAtwitterIcon").click($.userApi.showTwitterPopin);
				e.find("a.UAmyspaceIcon").click($.userApi.showMySpacePopin);
				e.find("a.UAgoogleIcon").click(function() {
					$.userApi.showOpenIDPopin('google');
					return false;
				});
				e.find("a.UAyahooIcon").click(function() {
					$.userApi.showOpenIDPopin('yahoo');
					return false;
				});
				
				/*var savedUser = $("#userApiHeader input[name='user']").val();
				var savedPass = $("#userApiHeader input[name='pass']").val();
				if (savedUser)
				loginForm.find("input[name='user']").val();
				loginForm.find("input[name='pass']").val();*/
			}
			
			function slShowTab(tab, h1t)
			{
				if (tab == lastTab){
					return;
				}
				tab.slideDown("fast");
				if (lastTab){
					lastTab.slideUp("fast");
				}
				if (o.showContinueTitle){
					h1t = lsTexts.sign_in_register_to_continue;
				}
				$("#UAloginSignupTitle h1").html(h1t);
				lastTab = tab;
			}
			
			function onInputFocus()
			{
				if ($(this).hasClass("UAinactive")){
					$(this).removeClass("UAinactive").val("");
				}
			}
			
			function onEmailBlur()
			{
				if ($(this).val() == ""){
					$(this).addClass("UAinactive").val("E-mail");
				}
			}
			
			function initSignUp(){
				eInp = signUpForm.find("input[name='email']");
				eInp.focus(onInputFocus);
				eInp.blur(checkEmail);
				
				sInp = signUpForm.find("input[name='screenname']");
				sInp.blur(checkScreenname);
				
				sInp.focus(onInputFocus);
				
				var ufakepass = signUpForm.find("input[name='fakepass']");
				ufakepass.focus(function(){
					$(this).hide();
					var pass = $(this).parent().find("input[name='password']");
					pass.show().focus();
				});
				
				p1Inp = signUpForm.find("input[name='password']");
				p1Inp.blur(checkPassword);
				
				signUpForm.submit(signup);
			}
			
			function initLogin(){
				
				var uinput = loginForm.find("input[name='user']");
				uinput.focus(onInputFocus);
				uinput.blur(onEmailBlur);
				
				var ufakepass = loginForm.find("input[name='fakepass']");
				ufakepass.focus(function(){
					$(this).hide();
					var pass = $(this).parent().find("input[name='pass']");
					pass.show().focus();
				});
				
				var upass = loginForm.find("input[name='pass']");
				upass.blur(function(){
					if ($(this).val() == ""){
						$(this).hide();
						var fakepass = $(this).parent().find("input[name='fakepass']");
						fakepass.show();
					}
				});
				
				loginForm.submit(function() {
					loginForm.find(".uaerr").hide();
					sb = container.find("a.signinButton");
					lb = showLoaderButton(sb, 'green');
					loginForm.find("input").each(function(){
						$(this).attr("disabled", true);
					});
					var dtosend = {
							page: 'login',
							user: loginForm.find("input[name='user']").val(),
							pass: loginForm.find("input[name='pass']").val()
						};
					var rememberme = loginForm.find("input[name='rememberme']").attr("checked");
					if (rememberme){
						dtosend.rememberme = 1;
					}
					ajax({
						data: dtosend,
						complete: function() {
							loginForm.find("input").each(function(){
								$(this).attr("disabled", false);
							});
							lb.remove();
							sb.show();
							loginForm.find("input[name='user']").focus();
						},
						success: function(d){
							if (d.code == 200){
								if (d.data.logged == true){
									onLogin(d.data, true);
								} else {
									containerHtml(d.data.data);
								}
							} else {
								if (d.code == 3){
									loginerr(d.data);
									//resend activation mail
									loginForm.find(".uaerr a").click(function(){
										resendActivationMail($(this).attr("title"));
										return false;
									});
									function resendActivationMail(email)
									{
										ajax({
											data: {page: 'resend-activation-mail', email: email},
											success: function(d){
												if (d.code == 200){
													containerHtml(d.data);
													$("#UAloginSignupTitle h1").html(d.data.title);
												} else {
													err(d.data);
												}
											}
										});
									}
								} else {
									loginerr(d.data);
								}
							}
						}
					});
					return false;
				});
			}
			
			function loginerr(err){
				elem = loginForm.find(".uaerr");
				elem.html(err).fadeIn("fast");
			}
			
			function signup(){
				if (!o.validS.screenname) {
					checkScreenname(true);
					return false;
				}
				if (!o.validS.email){
					checkEmail(true);
					return false;
				}
				if (!o.validS.psw1) {
					checkPassword(true);
					return false;
				}
				
				loginForm.find(".uaerr").hide();
				
				data = signUpForm.serialize();
				
				sb = container.find("a.registerButton");
				lb = showLoaderButton(sb, 'green');
				
				signUpForm.find("input").each(function(){
					$(this).attr("disabled", true);
				});
				dataToSend = {page: 'signup', data: data}; 
				if (isset($.userApi.referralHash)){
					dataToSend.campaignHash = $.userApi.referralHash; 
				}
				ajax({
					data: dataToSend,
					complete: function() {
						signUpForm.find("input").each(function(){
							$(this).attr("disabled", false);
						});
						lb.remove();
						sb.show();
					},
					success: function(d) {
						if (d.code == 200){
							containerHtml(d.data);
							var tdiv = $("<div />").attr("id", "UAloginSignupTitle");
							if ($.browser.msie && $.browser.version < 9){
								tdiv.addClass("ie_suje");
							}
							tdiv.html('<h1>' + d.data.pageTitle + '</h1>');
							container.prepend(tdiv);
							if (typeof UA_onRegister == 'function'){
								UA_onRegister(d.data.user);
							}
							onLogin(d.data, true);
							container.find("button.UAb_continue").click(function(){
								if (typeof UA_onRegisterContinue == 'function'){
									UA_onRegisterContinue();
								}
							});
						} else {
							regError(d.data);
						}
					}
				});
				return false;
			}
			
			function regError(index){
				getText(index, function(text){
					elem = signUpForm.find(".uaerr");
					elem.html(text).fadeIn("fast");
				});
			}
			
			function hRegError(){
				signUpForm.find(".uaerr").hide();
			}
			function checkEmail(submit){
				eInp = signUpForm.find("input[name='email']");
				
				if (eInp.val() == '' && !eInp.hasClass("UAinactive")){
					eInp.addClass("UAinactive");
					eInp.val("E-mail");
				}
				
				if (submit != true && eInp.hasClass("UAinactive")){
					o.validS.email = false;
					return false;
				}
				if (!validEmail(eInp.val()) || eInp.hasClass("UAinactive")){
					eInp.addClass('err');
					if (eInp.hasClass("UAinactive")){
						regError('empty_email');
					} else {
						regError('invalid_email_address');
					}
					o.validS.email = false;
					return false;
				}
				ajax({
					data: {page: 'email_exists', email: eInp.val()},
					success: function(d) {
						if (d.data.exists == true){
							eInp.addClass('err');
							elem = signUpForm.find(".uaerr");
							elem.html(d.data.message).fadeIn("fast");
							o.validS.email = false;
							elem.find("a").click(function(){
								slShowTab(fpForm, 'Sign in');
								return false;
							});
						} else {
							o.validS.email = true;
							if (submit == true){
								signUpForm.submit();
							}
							hRegError();
						}
					}
				});
				return true;
			}
			
			function checkScreenname(submit){
				sInp = signUpForm.find("input[name='screenname']");
				
				if (sInp.val() == '' && !sInp.hasClass("UAinactive")){
					sInp.addClass("UAinactive");
					sInp.val("Name");
				}
				
				if (submit != true && sInp.hasClass("UAinactive")){
					o.validS.screenname = false;
					return false;
				}
				
				if (!validScreenName(sInp.val()) || sInp.hasClass("UAinactive")){
					sInp.addClass('err');
					if (sInp.hasClass("UAinactive")){
						regError('fill_in_your_name');
					} else {
						regError('name_invalid_caracters');
					}
					o.validS.screenname = false;
					return false;
				} else {
					sInp.removeClass('err');
					hRegError();
					o.validS.screenname = true;
					if (submit == true){
						signUpForm.submit();
					}
				}
			}
			
			function checkPassword(submit){
				p1Inp = signUpForm.find("input[name='password']");
				
				if (p1Inp.val() == ""){
					p1Inp.hide();
					var fakepass = p1Inp.parent().find("input[name='fakepass']");
					fakepass.show();
				}
				
				if (submit != true && p1Inp.val() == ''){
					o.validS.psw1 = false;
					return false;
				}
				if (p1Inp.val().length < 4){
					p1Inp.addClass('err');
					if (p1Inp.val() == ''){
						regError('empty_password');
					} else {
						regError('password_to_short');
					}
					o.validS.psw1 = false;
					return false;
				}
				o.validS.psw1 = true;
				if (submit == true){
					signUpForm.submit();
				}
			}
			
			function validEmail(email){
				var regMail = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
				if (regMail.test(email)){
					return true;
				}
				return false;
			}

			function validScreenName(name){
				var regName = /^[0-9A-Za-z_\- ]+$/;
				if (regName.test(name)){
					return true;
				}
				return false;
			}
			
			function isset(v){
				return (typeof v != 'undefined');
			}
			
			function ajax(d){
				if (!isset(d.data)){
					d.data = {};
				}
				if (!d.data.page){
					d.data.page = o.page;
				}
				if (!d.data.terminal){
					d.data.terminal = $.userApi.terminal;
				}
				if (typeof $.userApi.sessionId != 'undefined' && $.userApi.sessionId != ''){
					d.data.PHPSESSID = $.userApi.sessionId;
				}
				if (typeof stTrackingSystem != 'undefined'){
					d.data.stTrackingSystem = stTrackingSystem;
				}
				if (typeof stTrackingObjectSystem != 'undefined'){
					d.data.stTrackingObjectSystem = stTrackingObjectSystem;
				}
				if ($.userApi.lang){
					d.data.lang = $.userApi.lang;
				}
				
				$.ajax({
					url: $.userApi.localAjaxUrl,
					type: $.userApi.ajaxType,
					dataType: $.userApi.ajaxDataType,
					data: d.data,
					success: function(data){
						if (data.data.session_expired){
							$.userApi.onSessionExpired();
						}
						if (data.code == 300){
							$.userApi.replaceApiHeader(data.data.header);
							location.href = $.userApi.loginPage;
							return false;
						}
						
						if (data.data.points){
							$("#UA_points_header").html(data.data.points);
						}
						if (typeof d.success == 'function'){
							d.success(data);
						}
					},
					complete: function(){
						if (typeof d.complete == 'function'){
							d.complete();
						}
					}
				});
			}
			
			function regErr(err){
				container.find(".errt").html(err);
			}
			
			function herr(){
				if (typeof o.onHideError == 'function'){
					o.onHideError(err);
				} else if (typeof UA_onHideError == 'function')  {
					UA_onHideError(err);
				}
			}
			
			function err(err){
				if (typeof o.onError == 'function'){
					o.onError(err);
				} else if (typeof UA_onError == 'function')  {
					UA_onError(err);
				} else {
					alert(err);
				}
			}
			
			function not(not){
				if (typeof o.onNotice == 'function'){
					o.onNotice(not);
				} else if (typeof UA_onNotice == 'function')  {
					UA_onNotice(not);
				} else {
					alert(not);
				}
			}
			
			function getAjaxLoader(){
				return $("<img />").attr({src: $.userApi.apiUrl+"images/ajax-loader.gif?v2", 'class': 'UALoader'});
			}
			
			function showLoaderButton(elem, color)
			{
				c = $("<div />").addClass("button").addClass("loaderButton"+color);
				c.width(elem.width()-2); c.height(elem.height()-2);
				i = $("<img />").attr({src: $.userApi.apiUrl+"images/ajax-loader-"+color+".gif"});
				c.append(i);
				elem.hide().after(c);
				return c;
			}
			
			containerHtmlTimeout = null;
			function containerHtml(d){
				if (o.page == 'login' || o.page == 'signup' || o.page == 'forgot-password'){
					var apc = container;
				} else {
					var apc = container.find("div.userApiContainer");
				}
				apc.html(d.content);
				apc.hide().fadeIn("fast");
				if (!d.logged){
					loginSignupInit();
				}
				apc.find('a').each(function(){$.userApi.analyticsDomainCheck($(this))});
				if (typeof UA_OnLoadContent == 'function'){
					UA_OnLoadContent(container);
				}
			}
		};
	
})(jQuery);

$(document).ready(function(){
	// temp
	/*
	if ($.userApi.terminal != 'snacktools' && $.userApi.terminal != 'flipsnack' && !$.userApi.cookie('UAtempNotice')){
		var tempDiv = $('<div />').attr("id", "UA-tempInfo").css({'background': '#ffffce', 'padding': '3px 0 4px', 'font-size': '11px', 'color': '#2c2c2c'});
		tempDiv.html('<div style="width:952px; padding:0 27px; margin:auto; text-align:center;">We\'ve made some important changes to the publishing system. <a href="/publish-update-2011-april.html">Find out more</a>. &nbsp; &nbsp; &nbsp; [<a href="#" id="UA-closeTempInfo">Close</a>]</div>');
		$("#UA-header").before(tempDiv);
		$("#UA-closeTempInfo").click(function(){
			$("#UA-tempInfo").slideUp("fast", function(){$(this).remove()});
			$.cookie('UAtempNotice', true, {expires: 14, path: '/'});
			return false;
		});
	}
	*/
	var textClose = $("#UAtext_close").val() || 'Close'; 
	$.userApi.userApiContainerHtml = '<div class="userApiBackBG"><div class="userApiHolder"><div class="userApiBG"><div class="userApiContainer"></div></div><a href="#" class="UAclose">' + textClose + '</a></div></div>';
	var vars = $.userApi.getUrlVars();
	if (vars && vars.uref){
		$.userApi.cookie('UAuref', vars.uref, {expires: 365, path: '/'});
	}
	if ($.userApi.sessionExpired){
		$.userApi.onSessionExpired();
	}
	$.userApi.initHeader($("#UA-header"));

	$('a').each(function(){$.userApi.analyticsDomainCheck($(this))});
	
	if (window.addEventListener) {
        window.addEventListener("keydown", $.userApi.konami, true);
	} else {
		$(document).keydown($.userApi.konami);
	}
	
    jQuery(window).hashchange(function() {
    	$.userApi.loadPage();
    	if (typeof UA_onHashChange == 'function'){
    		UA_onHashChange();
    	}
    });
    
    $.userApi.loadPage();
    setInterval($.userApi.checkSessionStatus, $.userApi.checkSessionStatusTimeout * 1000);
    $.userApi.preloadImage('logos.png');
});

var tooltipIndex = 0;
$.fn.tooltip = function(conf) {
    var c = {
    	content: '',
    	className: null,
    	width: null
    };
    $.extend(c, conf);
    tooltipIndex++;
    var isJQuery = c.content instanceof jQuery;
    if (isJQuery){
    	c.content.hide();
    	c.content = c.content.html();
    }
    
    this.attr("ttid", "tt"+tooltipIndex);
    e = $("<div />").attr("id", "tt"+tooltipIndex).html(c.content).hide();
    tout = true;
    e.hover(
    	function(){
    		$(this).stop(true,true).fadeIn("fast");
    		tout = false;
    	}, 
    	function(){
    		$(this).fadeOut("fast");
    });
    if (c.className != null){
    	e.addClass(c.className);
    } else {
    	e.addClass("UAtooltip");
    }
    if (c.width != null){
    	e.css('width', c.width + 'px');
    }
    $("body").prepend(e);
    this.hover(tooltipover, tooltipout);
    
    function tooltipover()
    {
    	var e = $("#"+$(this).attr("ttid"));
    	var pos = $(this).offset();
    	var posT = pos.top + $(this).height() + 2;
    	p = $(window).height() + $(window).scrollTop() - e.innerHeight();
    	if (p < posT){
    		posT -= (e.innerHeight() + $(this).height()+4);
    		if (posT < $(window).scrollTop()){
    			posT = $(window).scrollTop();
    		}
    	}
    	var posL = pos.left + ($(this).width() / 2);
		var oWidth = e.outerWidth();
		var dWidth = $(window).width();
		var maxPosL = dWidth - oWidth;
		if (posL > maxPosL){
			posL = maxPosL;
		}
		
		e.css({left: posL + 'px', top: posT + 'px'});
    	e.stop(true,true).fadeIn("fast");
    };
    
    function tooltipout()
    {
    	
    	e = $("#"+$(this).attr("ttid"));
    	setTimeout(function(){
    		if (tout == true){
    			e.fadeOut("fast");
    		}
    		tout = true;
    	}, 200);
    };
    
};

//Simple Set Clipboard System
//Author: Joseph Huckaby

var UAClipboard = {
	
	version: "1.0.7",
	clients: {}, // registered upload clients on page, indexed by id
	moviePath: $.userApi.apiUrl + 'js/UAClipboard.swf', // URL to movie
	nextId: 1, // ID of next movie
	
	$: function(thingy) {
		// simple DOM lookup utility function
		if (typeof(thingy) == 'string') thingy = document.getElementById(thingy);
		if (!thingy.addClass) {
			// extend element with a few useful methods
			thingy.hide = function() { this.style.display = 'none'; };
			thingy.show = function() { this.style.display = ''; };
			thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; };
			thingy.removeClass = function(name) {
				var classes = this.className.split(/\s+/);
				var idx = -1;
				for (var k = 0; k < classes.length; k++) {
					if (classes[k] == name) { idx = k; k = classes.length; }
				}
				if (idx > -1) {
					classes.splice( idx, 1 );
					this.className = classes.join(' ');
				}
				return this;
			};
			thingy.hasClass = function(name) {
				return !!this.className.match( new RegExp("\\s*" + name + "\\s*") );
			};
		}
		return thingy;
	},
	
	setMoviePath: function(path) {
		// set path to ZeroClipboard.swf
		this.moviePath = path;
	},
	
	dispatch: function(id, eventName, args) {
		// receive event from flash movie, send to client		
		var client = this.clients[id];
		if (client) {
			client.receiveEvent(eventName, args);
		}
	},
	
	register: function(id, client) {
		// register new client to receive events
		this.clients[id] = client;
	},
	
	getDOMObjectPosition: function(obj, stopObj) {
		// get absolute coordinates for dom element
		var info = {
			left: 0, 
			top: 0, 
			width: obj.width ? obj.width : obj.offsetWidth, 
			height: obj.height ? obj.height : obj.offsetHeight
		};

		while (obj && (obj != stopObj)) {
			info.left += obj.offsetLeft;
			info.top += obj.offsetTop;
			obj = obj.offsetParent;
		}

		return info;
	},
	
	Client: function(elem) {
		// constructor for new simple upload client
		this.handlers = {};
		
		// unique ID
		this.id = UAClipboard.nextId++;
		this.movieId = 'ZeroClipboardMovie_' + this.id;
		
		// register client with singleton to receive flash events
		UAClipboard.register(this.id, this);
		
		// create movie
		if (elem) this.glue(elem);
	}
};

UAClipboard.Client.prototype = {
	
	id: 0, // unique ID for us
	ready: false, // whether movie is ready to receive events or not
	movie: null, // reference to movie object
	clipText: '', // text to copy to clipboard
	handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor
	cssEffects: true, // enable CSS mouse effects on dom container
	handlers: null, // user event handlers
	
	glue: function(elem, appendElem, stylesToAdd) {
		// glue to DOM element
		// elem can be ID or actual DOM element object
		this.domElement = UAClipboard.$(elem);
		
		if (typeof(appendElem) == 'string') {
			appendElem = UAClipboard.$(appendElem);
		}
		else if (typeof(appendElem) == 'undefined') {
			appendElem = document.getElementsByTagName('body')[0];
		}
		
		// find X/Y position of domElement
		var box = UAClipboard.getDOMObjectPosition(this.domElement, appendElem);
		
		// create floating DIV above element
		this.div = document.createElement('div');
		var style = this.div.style;
		style.position = 'absolute';
		style.left = '0px';
		style.top = '0px';
		style.width = '' + box.width + 'px';
		style.height = '' + box.height + 'px';
		
		if (typeof(stylesToAdd) == 'object') {
			for (addedStyle in stylesToAdd) {
				style[addedStyle] = stylesToAdd[addedStyle];
			}
		}
		
		// style.backgroundColor = '#f00'; // debug
		this.domElement.appendChild(this.div);
		
		this.div.innerHTML = this.getHTML( box.width, box.height );
	},
	
	getHTML: function(width, height) {
		// return HTML for movie
		var html = '';
		var flashvars = 'id=' + this.id + 
			'&width=' + width + 
			'&height=' + height;
			
		if (navigator.userAgent.match(/MSIE/)) {
			// IE gets an OBJECT tag
			var protocol = location.href.match(/^https/i) ? 'https://' : 'http://';
			html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+protocol+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+width+'" height="'+height+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+UAClipboard.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+flashvars+'"/><param name="wmode" value="transparent"/></object>';
		}
		else {
			// all other browsers get an EMBED tag
			html += '<embed id="'+this.movieId+'" src="'+UAClipboard.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+flashvars+'" wmode="transparent" />';
		}
		return html;
	},
	
	hide: function() {
		// temporarily hide floater offscreen
		if (this.div) {
			this.div.style.left = '-2000px';
		}
	},
	
	show: function() {
		// show ourselves after a call to hide()
		this.reposition();
	},
	
	destroy: function() {
		// destroy control and floater
		if (this.domElement && this.div) {
			this.hide();
			this.div.innerHTML = '';
			
			var body = document.getElementsByTagName('body')[0];
			try { body.removeChild( this.div ); } catch(e) {;}
			
			this.domElement = null;
			this.div = null;
		}
	},
	
	reposition: function(elem) {
		// reposition our floating div, optionally to new container
		// warning: container CANNOT change size, only position
		if (elem) {
			this.domElement = UAClipboard.$(elem);
			if (!this.domElement) this.hide();
		}
		
		if (this.domElement && this.div) {
			var box = UAClipboard.getDOMObjectPosition(this.domElement);
			var style = this.div.style;
			style.left = '' + box.left + 'px';
			style.top = '' + box.top + 'px';
		}
	},
	
	setText: function(newText) {
		// set text to be copied to clipboard
		this.clipText = newText;
		if (this.ready) this.movie.setText(newText);
	},
	
	addEventListener: function(eventName, func) {
		// add user event listener for event
		// event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel
		eventName = eventName.toString().toLowerCase().replace(/^on/, '');
		if (!this.handlers[eventName]) this.handlers[eventName] = [];
		this.handlers[eventName].push(func);
	},
	
	setHandCursor: function(enabled) {
		// enable hand cursor (true), or default arrow cursor (false)
		this.handCursorEnabled = enabled;
		if (this.ready) this.movie.setHandCursor(enabled);
	},
	
	setCSSEffects: function(enabled) {
		// enable or disable CSS effects on DOM container
		this.cssEffects = !!enabled;
	},
	
	receiveEvent: function(eventName, args) {
		// receive event from flash
		eventName = eventName.toString().toLowerCase().replace(/^on/, '');
				
		// special behavior for certain events
		switch (eventName) {
			case 'load':
				// movie claims it is ready, but in IE this isn't always the case...
				// bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function
				this.movie = document.getElementById(this.movieId);
				if (!this.movie) {
					var self = this;
					setTimeout( function() { self.receiveEvent('load', null); }, 1 );
					return;
				}
				
				// firefox on pc needs a "kick" in order to set these in certain cases
				if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {
					var self = this;
					setTimeout( function() { self.receiveEvent('load', null); }, 100 );
					this.ready = true;
					return;
				}
				
				this.ready = true;
				this.movie.setText( this.clipText );
				this.movie.setHandCursor( this.handCursorEnabled );
				break;
			
			case 'mouseover':
				if (this.domElement && this.cssEffects) {
					this.domElement.addClass('hover');
					if (this.recoverActive) this.domElement.addClass('active');
				}
				break;
			
			case 'mouseout':
				if (this.domElement && this.cssEffects) {
					this.recoverActive = false;
					if (this.domElement.hasClass('active')) {
						this.domElement.removeClass('active');
						this.recoverActive = true;
					}
					this.domElement.removeClass('hover');
				}
				break;
			
			case 'mousedown':
				if (this.domElement && this.cssEffects) {
					this.domElement.addClass('active');
				}
				break;
			
			case 'mouseup':
				if (this.domElement && this.cssEffects) {
					this.domElement.removeClass('active');
					this.recoverActive = false;
				}
				break;
		} // switch eventName
		
		if (this.handlers[eventName]) {
			for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) {
				var func = this.handlers[eventName][idx];
			
				if (typeof(func) == 'function') {
					// actual function reference
					func(this, args);
				}
				else if ((typeof(func) == 'object') && (func.length == 2)) {
					// PHP style object + method, i.e. [myObject, 'myMethod']
					func[0][ func[1] ](this, args);
				}
				else if (typeof(func) == 'string') {
					// name of function
					window[func](this, args);
				}
			} // foreach event handler defined
		} // user defined handler for event
	}
	
};

if (typeof window.console == 'undefined'){
	window.console = {log: function(v){}};
}
