//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>").attr({className:"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>").attr({className:"jScrollPaneTrack"}).css({width:C.scrollbarWidth+"px"}).append(A("<div></div>").attr({className:"jScrollPaneDrag"}).append(A("<div></div>").attr({className:"jScrollPaneDragTop"}),A("<div></div>").attr({className:"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);

(function($){
	var UAcontainer;
	var UAoptions;
	var UACartWindow;
	var UATellUserToLogin = null;
		
	$.userApi = {
		//apiUrl: 'http://stapi.dev.snacktools.net/',
		//apiUrl: 'http://stapi.snacktools/',
		apiUrl: 'http://stapi.snacktools.com/',
		//relatedDomains: [ "dev.snacktools.net", "dev.bannersnack.net", "dev.photosnack.net", "dev.podsnack.net" ],
		//relatedDomains: [ "snacktools", "bannersnack", "photosnack", "podsnack" ],
		relatedDomains: [ "snacktools.com", "bannersnack.com", "photosnack.com", "podsnack.com" ],
		ajaxUrl: 'index.php',
		ajaxDataType: 'jsonp',
		ajaxType: 'get',
		containerId: 'userApiCont',
		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 = decodeURIComponent(extraData[i]);
							if(data.page.substr(0,3) != 'st-'){
								return;
							}
							data.page = data.page.substr(3);
							continue;
						}
						p = extraData[i].split('=');
						data[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
					}
					$("#" + $.userApi.containerId).userApi(data);
				}
			}
		},
		showFacebookPopin: function (){
			ifrsrc = $.userApi.apiUrl + 'facebook/facebook.php?terminal='+encodeURIComponent($.userApi.terminal);
			if (typeof $.userApi.referralHash != 'undefiend'){
				ifrsrc += '&campaignHash=' + encodeURIComponent($.userApi.referralHash); 
			}
			pWidth = 450;
			pHeight = 364;
			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);
			$.userApi.closetellUserToLogin();
			return false;
		},
		showOpenIDPopin: function (type){
			ifrsrc = $.userApi.apiUrl + 'OpenID/index.php?terminal='+encodeURIComponent($.userApi.terminal);
			if (typeof $.userApi.referralHash != 'undefiend'){
				ifrsrc += '&campaignHash=' + encodeURIComponent($.userApi.referralHash); 
			}
			ifrsrc += '&type=' + encodeURIComponent(type);
			switch(type){
				default:
					pWidth = 450; pHeight = 364;
					break;
				case 'yahoo':
					pWidth = 500; pHeight = 444;
					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);
			$.userApi.closetellUserToLogin();
			return false;
		},
		checkLogin: function (sId) {
			$.userApi.closeFacebookPopup();
			$.userApi.rightLoaded = false;
			$.userApi.sessionId = sId;
			if (typeof UAcontainer == 'undefined'){
				$("<div />").userApi({page: 'check-login', PHPSESSID: sId});
			} else {
				UAcontainer.userApi({page: 'check-login', PHPSESSID: sId});
			}
		},
		closeFacebookPopup: function() {
			$(window).focus();
		},
		colapse: function() {
			$.userApi.close(UAcontainer);
			$.userApi.colapsed = true;
			location.href = '#';
			return false;
		},
		jump: function(l) {
			window.location.href = l;
		},
		open: function(c,colapsed) {
			if (!$.userApi.isOpen){
				if($(window).scrollTop() > 0){
					$('html').animate({scrollTop: 0}, $.userApi.openCloseTime/2);
				}
				c.slideDown($.userApi.openCloseTime, function(){
					$.userApi.isOpen = true;
					if (colapsed != true){
						UAcontainer.userApi(UAoptions);
					}
				});
				c.show();
				uh = $("#userApiHeader");
				uhcc = uh.find(".uhcc");
				w = uhcc.width(); 
				uhcc.hide();
				uh.find(".uhco").width(w).show();
				$.userApi.closetellUserToLogin();
			}
		},
		close: function(c) {
			if (typeof c == 'undefined'){
				c = UAcontainer;
			}
			c.slideUp($.userApi.openCloseTime);
			$.userApi.isOpen = false;
			$.userApi.closetellUserToLogin();
			uh = $("#userApiHeader");
			uh.find(".uhcc").show();
			uh.find(".uhco").hide();
			$.userApi.closetellUserToLogin();
		},
		initHeader: function(e) {
			e.find("a.stlogo").click(function(){
				if ($.userApi.colapsed == true){
					ua = $("#"+$.userApi.containerId);
					$.userApi.open(ua, true);
					return false;
				}
			}).hover(function(){
				$(this).addClass("stlogohoverclosed");
			}, function(){
				$(this).removeClass("stlogohoverclosed");
			});
			e.find("a.collapse").click($.userApi.colapse);
			e.find("a.facebookIcon").click($.userApi.showFacebookPopin);
			e.find("a.googleIcon").click(function() {
				$.userApi.showOpenIDPopin('google');
			});
			e.find("a.yahooIcon").click(function() {
				$.userApi.showOpenIDPopin('yahoo');
			});
			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);
					}
				}
			});
		},
		tellUserToLogin: function() {
			$.userApi.closetellUserToLogin();
			h = $("#userApiHeader");
			if (UATellUserToLogin == null){
				UATellUserToLogin = $("<div />").addClass("UA_tutl_main");
				c = $("<div />").addClass("UA_tutl_content");
				a = $("<a />").attr("href", "#").addClass("close").click($.userApi.closetellUserToLogin).text("Close");
				text= $("<div />").html('Please sign in to continue. We accept Facebook, Google, Yahoo and SnackTools<br /> accounts. Don\'t own any of these accounts? <a href="#st-signup">Register</a> to SnackTools.'); 
				c.append(a).append(text);
				a = $("<div />").addClass("UA_tutl_arrow");
				UATellUserToLogin.append(c);
				UATellUserToLogin.append(a);
				$("body").append(UATellUserToLogin);
			}
			pos = h.offset();
			ptop = pos.top + 88;
			pleft = pos.left - 542;
			
			if ($(window).scrollTop() > 0){
				scrollSpeed = $(window).scrollTop()*0.5;
								
				if (scrollSpeed < 150) {
					scrollSpeed = 150;
				}
				ae = $.browser.safari ? $('body') : $('html'); 
				ae.animate({'scrollTop': 0}, scrollSpeed, function(){
					$.userApi._animateTellUserToLogin(UATellUserToLogin, ptop, pleft);
				});
			} else {
				$.userApi._animateTellUserToLogin(UATellUserToLogin, ptop, pleft);
			}
			return false;
		},
		_animateTellUserToLogin: function(el, ptop, pleft){
			el.css({top: ptop+'px', left: pleft+'px'});
			el.fadeIn(400);
			a = el.find(".UA_tutl_arrow");
			ah = a.height()-4;
			a.animate({top: -ah}, 500);
		},
		closetellUserToLogin: function() {
			if (UATellUserToLogin == null){
				return;
			}
			UATellUserToLogin.hide();
			a = UATellUserToLogin.find(".UA_tutl_arrow");
			a.css("top", "25px");
			return false;
		},
		buyPoints: function(points) {
			ppointsDialog = points;
			if ($.userApi.dialogBuyPoints == null){
				pdialog = $("<div />").attr({id: 'UA_dialog_buypoints', title: 'Buy points'});
				
				pdialog.dialog({
					modal: true,
					autoOpen: false,
					width: 669,
					minHeight: 390, 
					open: function() {
						loaderWhiteSrc = $.userApi.apiUrl + 'images/ajax-loader-white-big.gif';
						loaderWhite = $("<img />").attr({src: loaderWhiteSrc}).css({margin: '80px auto 80px auto', display: 'block'});
						dial = $(this);
						dial.html(loaderWhite);
						
						dataToSend = {page: 'buy-points-popin', terminal: $.userApi.terminal, points: ppointsDialog};
						if (typeof $.userApi.sessionId != 'undefined' && $.userApi.sessionId != ''){
							dataToSend.PHPSESSID = $.userApi.sessionId;
						}
						
						$.ajax({
							url: $.userApi.apiUrl + $.userApi.ajaxUrl,
							type: $.userApi.ajaxType,
							dataType: $.userApi.ajaxDataType,
							data: dataToSend,
							success: function(d){
								if (d.code == 200){
									pdialogData = d.data;
									pdialog.html(d.data.left);
									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($.userApi.onSubmitBuyPointsForm);
									pdialog.find("form.buypointsformrecursive").submit($.userApi.onSubmitBuyPointsForm);
									pdialog.find("form.buymorepointsform").submit($.userApi.onSubmitBuyPointsForm);
									pdialog.find(".buymorepointsform a.buyPointsLeft").click(function(){
										f = pdialog.find("form.buymorepointsform");
										el = f.find("#selpoints");
										cerr = f.find(".uaerror");
										cerr.hide();
										if (el.val() < pdialogData.minPoints || el.val() > pdialogData.maxPoints){
											cerr.html("You have to buy at least " + pdialogData.minPoints + " points.");
											cerr.fadeIn("fast");
											return false;
										}
										f.submit();
									});
									
									pdialog.find("a.specify_larger_amount").click(function(){
										pdialog.find(".buypointspart").hide();
										pdialog.find(".buymorepointspart").fadeIn("fast");
										return false;
									});
								} else {
									pdialog.html(d.data);
								}
							}
						});
					},
					buttons: {
						Cancel: function() {
							$(this).dialog('close');
						}
					}
				});
				
				pdial = pdialog.parent(); 
				pdial.attr({id: 'UA_dialog'});
				pdial.find(".ui-dialog-buttonpane button").addClass("button_cancel");
				$.userApi.dialogBuyPoints = pdialog;
			}
			if (ppointsDialog > 0){
				dTitle = 'Not enough points';
			} else {
				dTitle = 'Buy points';
			}
			
			$.userApi.dialogBuyPoints.dialog('title', dTitle);
			$.userApi.dialogBuyPoints.dialog('open');
		},
		onSubmitBuyPointsForm: function(){
			url = $(this).attr("action") + '?' + $(this).serialize() + '&terminal=' + $.userApi.terminal;
			if ($.userApi.referralHash != null){
				url += '&ref=' + $.userApi.referralHash;
				if ($.userApi.referralDate != null){
					url += '&refDate=' + $.userApi.referralDate;
				}
			}
			if ($.cookie('__utma')) {
				url += '&__utma=' + $.cookie('__utma');
			}
			if ($.cookie('__utmb')) {
				url += '&__utmb=' + $.cookie('__utmb');
			}
			if ($.cookie('__utmc')) {
				url += '&__utmc=' + $.cookie('__utmc');
			}
			if ($.cookie('__utmz')) {
				url += '&__utmz=' + $.cookie('__utmz');
			}
			if ($.cookie('__utmv')) {
				url += '&__utmv=' + $.cookie('__utmv');
			}
			if ($.cookie('__utmx')) {
				url += '&__utmx=' + $.cookie('__utmx');
			}
			if ($.userApi.dialogBuyPoints != null){
				$.userApi.dialogBuyPoints.dialog('close');
			}
			$.userApi.openBuyPointsPopup(url);
			$.userApi.onBuyPoints();
			return false;
		},
		openBuyPointsPopup: function() {
			if (typeof UACartWindow != 'undefined'){
				UACartWindow.close();
			}
			UACartWindow = window.open(url, 'Snacktools');
		},
		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};
			if (typeof $.userApi.sessionId != 'undefined' && $.userApi.sessionId != ''){
        		dataToSend.PHPSESSID = $.userApi.sessionId;
			}
			$.ajax({
				url: $.userApi.apiUrl + $.userApi.ajaxUrl,
				type: $.userApi.ajaxType,
				dataType: $.userApi.ajaxDataType,
				data: dataToSend,
				success: function(d){
					if (d.code == 200){
						$("#UA_points_container").html(d.data.display);
						$("#UA_points_header").html(d.data.total_points);
					}
				}
			});
		},
		replaceApiHeader: function(d) {
			h = $("#userApiHeader").hide();
			h.hide().after(d);
			h.remove();
			uh = $("#userApiHeader");
			$.userApi.initHeader(uh);
			if ($.userApi.isOpen){
				uhcc = uh.find(".uhcc");
				w = uhcc.width(); 
				uhcc.hide();
				uh.find(".uhco").width(w).show();
			}
		},
		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;
					});
				}
			});
		},
		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 ($.cookie('__utma')) {
				$('<input>').appendTo('#'+i).attr('name', '__utma').val($.cookie('__utma'));
			}
			if ($.cookie('__utmb')) {
				$('<input>').appendTo('#'+i).attr('name', '__utmb').val($.cookie('__utmb'));
			}
			if ($.cookie('__utmc')) {
				$('<input>').appendTo('#'+i).attr('name', '__utmc').val($.cookie('__utmc'));
			}
			if ($.cookie('__utmz')) {
				$('<input>').appendTo('#'+i).attr('name', '__utmz').val($.cookie('__utmz'));
			}
			if ($.cookie('__utmv')) {
				$('<input>').appendTo('#'+i).attr('name', '__utmv').val($.cookie('__utmv'));
			}
			if ($.cookie('__utmx')) {
				$('<input>').appendTo('#'+i).attr('name', '__utmx').val($.cookie('__utmx'));
			}
			$('#'+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};
	        	if (typeof $.userApi.sessionId != 'undefined' && $.userApi.sessionId != ''){
	        		dataToSend.PHPSESSID = $.userApi.sessionId;
				}
	        	$.ajax({
					url: $.userApi.apiUrl + $.userApi.ajaxUrl,
					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);
						}
					}
				});
	        }
		},
		konamiparams: { 'code' : [38, 38, 40, 40, 37, 39, 37, 39, 66, 65], 'step' : 0},
		isOpen: false,
		colapsed: false,
		referralHash: null,
		referralDate: null,
		rightLoaded: false,
		inited: false,
		onBuyPointsInterval: 5000,
		onBuyPointsTimeout: null,
		konamiInited: false,
		dialogBuyPoints: null
	};
	
	$.fn.userApi = function (options){
			var container = this;
			UAcontainer = container;
			var oldCont = $("<div />").append($(this).html());
			var defaults = {showLoader: true};
			
			var o = $.extend(defaults, options);
			UAoptions = o;
			
			o.apiUrl = $.userApi.apiUrl;
			o.ajaxUrl = $.userApi.ajaxUrl;
			o.ajaxDataType = $.userApi.ajaxDataType;
			o.ajaxType = $.userApi.ajaxType;
			o.terminal = $.userApi.terminal;
			
			if ($.userApi.inited == false){
				_init(); $.userApi.inited = true;
			}
			
			var m = {
				ERR_EMAIL_EXISTS: 'Email already exists in our database. Please use our password <a href="#st-forgot-password">recovery page</a>.',
				ERR_INVALID_EMAIL: 'Please enter a valid email address.',
				ERR_INVALID_SCREENNAME: 'Your name contains invalid characters.',
				ERR_PASS_TO_SHORT: 'Please enter at least 4 characters for your password.',
				ERR_PASS_NOT_MATCH: 'Your passwords do not match! Please make sure your password is re-entered properly.',
				ERR_PASS_NOT_MATCH_RETYPE: 'Passwords do not match! Please retype your passwords.',
				ERR_ENTER_NAME: 'Please enter your name.',
				ERR_NAME_INVALID_CHARS: 'Your name contains invalid characters.',
				ERR_COMPLETE_ALL_FIELDS: 'Please complete all fields.',
				NOT_ACCOUNT_UPDATED: 'Your account information have been succesfully updated.',
				ERR_ENTER_CAMPAIGN_NAME: 'Please complete campaign name.',
				NOT_CAMPAIGN_SAVED: 'The campaign has been successfully saved.',
				NOT_CAMPAIGN_DELETED: 'The campaign has been successfully deleted.'
			};
			
			//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.page != 'logout' && o.page != 'check-login' && o.page != 'set-session' && o.page != 'auto-login'){
				al = getAjaxLoader();
				if ($.userApi.rightLoaded){
					al.css({display: 'block', margin: '136px auto 0 auto'});
					container.find("div.left").html(al);
				} else {
					al.css({display: 'block', margin: '-16px auto -16px auto', position: 'absolute', top: '50%', left: '50%'});
					container.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 'point-history':
					pointsHistory();
					break;
					
				case 'auto-login':
					autoLogin();
					break;
					
				case 'login':
					$.userApi.rightLoaded = false;
					getLoginAndSignupPage({open: 'login'});
				break;
				
				case 'buy-points':
					buyPoints();
					break;
					
				case 'buy-more-points':
					buyMorePoints();
					break;
				
				case 'check-login':
					checkLogin();
					break;
					
				case 'my-tools':
					myTools();
					break;
				
				case 'signup':
					$.userApi.rightLoaded = false;
					getLoginAndSignupPage({open: 'signup'});
					break;
				
				case 'account-options':
					getAccountOptions();
					break;
					
				case 'change-password':
					getChangePassword();
					break;
					
				case 'order-history':
					getOrders();
					break;
					
				case 'forgot-password':
					getForgotPassword();
					break;
					
				case 'logout':
					logout();
					break;
					
			};
			
			// auto login
			function autoLogin()
			{
				ajax({
					data: {user: o.user, pass: o.pass},
					success: function(d) {
						$.userApi.replaceApiHeader(d.data.header);
						if (d.data.logged == true){
							$.userApi.sessionId = d.data.PHPSESSID;
							if (typeof UA_onLogin == 'function'){
								UA_onLogin(d.data.PHPSESSID);
							}
							$.userApi.closetellUserToLogin();
							if (o.next){
								location.href = '#'+o.next;
							} else {
								location.href = '#';
							}
						}
					}
				});
			}
			
			// mytools
			function myTools()
			{
				ajax({
					data: {tool: o.tool},
					success: function(d) {
						if (d.code == 200){
							containerHtml(d.data);
						} else {
							err(d.data);
						}
					}
				});
			}
			
			//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);
						}
					}
				});
			};
			
			//buy more points
			var buyMorePoints = {
				min: 0,
				max: 0
			};
			
			function buyMorePoints(){
				ajax({
					success: function(d) {
						if (d.code == 200){
							containerHtml(d.data);
							buyMorePoints.min = d.data.minPoints;
							buyMorePoints.max = d.data.maxPoints;
							container.find("#selpoints").keyup(function(event){
								v = parseInt($(this).val());
								if (isNaN(v)){
									$(this).val("");
									return;
								}
								$(this).val(v);
							});
							container.find("a.buyPointsLeft").click(function(){
								f = container.find("form.buypointsform");
								el = f.find("#selpoints");
								cerr = f.find(".uaerror");
								cerr.hide();
								if (el.val() < buyMorePoints.min || el.val() > buyMorePoints.max){
									cerr.html("You have to buy at least " + buyMorePoints.min + " points.");
									cerr.fadeIn("fast");
									return false;
								}
								f.submit();
								return false;
							});
							container.find("form.buypointsform").submit($.userApi.onSubmitBuyPointsForm);
						} else {
							err(d.data);
						}
					}
				});
			}
			
			// buy points
			function buyPoints(){
				ajax({
					success: function(d) {
						if (d.code == 200){
							containerHtml(d.data);
							container.find("a.buyPointsLeft").click(function(){
								container.find("form.buypointsformnormal").submit();
								return false;
							});
							container.find("a.createsubscription").click(function(){
								container.find("form.buypointsformrecursive").submit();
								return false;
							});
							container.find("form.buypointsformnormal").submit($.userApi.onSubmitBuyPointsForm);
							container.find("form.buypointsformrecursive").submit($.userApi.onSubmitBuyPointsForm);
						} else {
							err(d.data);
						}
					}
				});
			}
			
			// forgot password
			
			function getForgotPassword(){
				ajax({
					data: o,
					success: function(d) {
						containerHtml(d.data);
						initForgotPassword();
					}
				});
			}
			
			function initForgotPassword(){
				container.find("a.recoverPasswordButton").click(function(){
					container.find("form.forgotPasswordForm").submit();
					return false;
				});
				container.find("form.forgotPasswordForm").submit(function(){
					f = $(this);
					em = f.find("#femail").val();
					if (!validEmail(em)) {
						f.find("div.uaerror").html(m.ERR_INVALID_EMAIL).fadeIn("fast");
					}
					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("#femail").val("");
							} else {
								f.find("div.uaerror").html(d.data).fadeIn("fast");
							}
						}
					});
					return false;
				});
			}
			
			//tryLogin
			function checkLogin()
			{
				opened = $.userApi.isOpen;
				ajax({
					data: {page: 'check-login', isOpen: opened},
					success: function(d) {
						if (d.data.logged == true){
							$.userApi.replaceApiHeader(d.data.header);
							if (opened == true){
								$.userApi.rightLoaded = false;
								containerHtml(d.data);
							}
							if (typeof UA_onLogin == 'function'){
								UA_onLogin(d.data.PHPSESSID);
							}
						} else {
							//err(d.data);
						}
					}
				});
			}
			
			//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").fadeIn("fast");
								},
								function(){
									if (!$(this).find("input").hasClass("selected")){
										$(this).find("input").hide();
										$(this).find("div").fadeIn("fast");
									}
								}
							);
						});
						
						container.find("p.cancelRecurringProfile a").click(function() {
							if (confirm('Cancel your profile?')){
								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();
						}
					}
				});
			}
			
			//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;
					}
					
					if (v == ''){
						cerr.html('Incorrect current password.').fadeIn("fast");
					}
					
					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;
						cerr.html(m.ERR_PASS_TO_SHORT).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;
						cerr.html(m.ERR_PASS_NOT_MATCH).fadeIn("fast");
					} else {
						changePasswordValid.newPasswordMatch = true;
						if (submit == true){
							changePasswordForm.submit();
						}
					}
					
				}
				
				changePasswordForm = container.find("form.changePasswordForm"); 
				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() {
					
					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');
					f.find(".uanotice").hide();
					
					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.accountOptionsForm a.updateAccountButton").click(function(){
					container.find("form.accountOptionsForm").submit();
					return false;
				});
				container.find("form.accountOptionsForm a.deleteAccount").click(function(){
					daData = 'By deleting your account, you lose all your personal data/files (acount information, slideshows, banners, images, etc), you also lose all points and subscriptions. Delete?';
					if (confirm(daData)){
						deleteAccount();
					}
				});
				container.find("form.accountOptionsForm").submit(function() {
					f = $(this);
					s = f.find("#screenname");
					
					errCont = f.find(".uaerror"); errCont.hide();
					notCont = f.find(".uanotice"); notCont.hide();
					
					if (s.val() == ""){
						errCont.html(m.ERR_ENTER_NAME).fadeIn("fast"); s.focus();
						return false;
					}
					if (!validScreenName(s.val())){
						errCont.html(m.ERR_NAME_INVALID_CHARS).fadeIn("fast"); s.focus();
						return false;
					}
					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(m.NOT_ACCOUNT_UPDATED).fadeIn("fast");
								container.find(".right .screenname span").html(s.val());
							} 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.rightLoaded = false;
				$.userApi.close(container);
				$.userApi.colapsed = false;
				
				if (d.data.logoutUrl){
					ifr = $("<iframe />").attr({src: d.data.logoutUrl, width: 1, height: 1});
					ifr.css({position: 'absolute', top: '-9999px', left: '-9999px'});
					ifr.ready(function(){
						$(this).remove();
					});
					container.before(ifr);
				}
				
				if (typeof UA_onLogout == 'function'){
					UA_onLogout();
				}
				$.userApi.replaceApiHeader(d.data.header);
				location.href = '#';
			}
			
			//load login
			function getLoginAndSignupPage(info){
				ajax({
					data: {page: 'login-signup', open: info.open},
					success: function(d) {
						containerHtml(d.data);
						if (d.data.logged == true){
							$.userApi.replaceApiHeader(d.data.header);
							$.userApi.sessionId = d.data.PHPSESSID;
							if (typeof UA_onLogin == 'function'){
								UA_onLogin(d.data.PHPSESSID);
							}
						}
					}
				});
			};
			
			//logout
			function logout(){
				ajax({
					data: {page: 'logout'},
					success: function(d) {
						applyLogout(d);
					}
				});
			}
			
			//login signup
			var validS = {
					email: false,
					screenname: false,
					psw1: false,
					psw2: false
			};
			var signUpForm = null;
			var loginForm = null;
			var changingTabs = false;
			var noteFormOldCont = {};
			
			function loginSignupInit(open){
				signUpForm = container.find("form.signup_form");
				loginForm = container.find("form.login_form");
				noteFormOldCont.login = loginForm.find(".note").html();
				noteFormOldCont.signUp = signUpForm.find(".note").html();
				container.find("a.signintab").click(function() {
					changingTabs = true;
					container.find("a.signintab").addClass("selected");
					container.find("a.registertab").removeClass("selected");
					signUpForm.fadeOut("fast", function() {
						loginForm.fadeIn("fast");
						loginForm.find("input[name='user']").focus();
						$(this).find(".note").removeClass("uaerr").html(noteFormOldCont.signUp);
						changingTabs = false;
					});
					herr();
					location.href = '#';
					return false;
				});
				
				container.find("a.registertab").click(function() {
					changingTabs = true;
					container.find("a.registertab").addClass("selected");
					container.find("a.signintab").removeClass("selected");
					loginForm.fadeOut("fast", function() {
						signUpForm.fadeIn("fast");
						signUpForm.find("input[name='email']").focus();
						$(this).find(".note").removeClass("uaerr").html(noteFormOldCont.login);
						changingTabs = false;
					});
					location.href = '#';
					herr();
					return false;
				});
				if (loginForm.css("display") == 'none'){
					signUpForm.find("input[name='email']").focus();
				} else {
					loginForm.find("input[name='user']").focus();
				}
				container.find("#forgot_pwd_label").hide();
				signUpForm.submit(signup);
				initSignUp();
				initLogin();
				loginForm.find("input[name='user']").val($("#userApiHeader input[name='user']").val());
				loginForm.find("input[name='pass']").val($("#userApiHeader input[name='pass']").val());
			}
			
			function initLogin(){
				
				loginForm.find(".connectWith a.facebook").click($.userApi.showFacebookPopin);
				loginForm.find(".connectWith a.google").click(function() {
					$.userApi.showOpenIDPopin('google');
				});
				loginForm.find(".connectWith a.yahoo").click(function() {
					$.userApi.showOpenIDPopin('yahoo');
				});
				loginForm.submit(function() {
					sb = container.find("a.signinButton");
					lb = showLoaderButton(sb, 'green');
					loginForm.find("input").each(function(){
						$(this).attr("disabled", true);
					});
					ajax({
						data: {
							page: 'login',
							user: loginForm.find("input[name='user']").val(),
							pass: loginForm.find("input[name='pass']").val()
						},
						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){
								$.userApi.rightLoaded = false;
								if (d.data.logged == true){
									containerHtml(d.data);
									$.userApi.replaceApiHeader(d.data.header);
									$.userApi.sessionId = d.data.PHPSESSID;
									if (typeof UA_onLogin == 'function'){
										UA_onLogin(d.data.PHPSESSID);
									}
									if (o.next){
										location.href = '#'+o.next;
									}
								} else {
									containerHtml(d.data.data);
								}
							} else {
								loginerr(d.data);
							}
						}
					});
					return false;
				});
			}
			
			function loginerr(err){
				elem = loginForm.find(".note");
				if (!elem.hasClass("uaerr")){
					elem.addClass("uaerr");
				}
				elem.html(err);
			}
			
			function signup(){
				if (!validS.email){
					checkEmail(true);
					return false;
				}
				if (!validS.screenname) {
					checkScreenname(true);
					return false;
				}
				if (!validS.psw1) {
					checkPassword(true);
					return false;
				}
				if (!validS.psw2){
					checkPassword2(true);
					return false;
				}

				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){
							$.userApi.rightLoaded = false;
							$.userApi.replaceApiHeader(d.data.header);
							containerHtml(d.data);
							$.userApi.rightLoaded = false;
							
							if (typeof UA_onRegister == 'function'){
								UA_onRegister(d.data.user);
							}
							$.userApi.sessionId = d.data.PHPSESSID;
							if (typeof UA_onLogin == 'function'){
								UA_onLogin(d.data.PHPSESSID);
							}
						} else {
							regError(d.data);
						}
					}
				});
				return false;
			}
			
			function regError(err){
				elem = signUpForm.find(".note");
				if (!elem.hasClass("uaerr")){
					elem.addClass("uaerr");
				}
				elem.html(err);
			}
			
			function hRegError(){
				signUpForm.find(".note").removeClass("uaerr").html(noteFormOldCont.signUp);
			}
			
			function initSignUp(){
				eInp = signUpForm.find("input[name='email']");
				eInp.blur(checkEmail);
				sInp = signUpForm.find("input[name='screenname']");
				sInp.blur(checkScreenname);
				p1Inp = signUpForm.find("input[name='password']");
				p1Inp.blur(checkPassword);
				p2Inp = signUpForm.find("input[name='password2']");
				p2Inp.blur(checkPassword2);
			}
			
			function checkEmail(submit){
				
				eInp = signUpForm.find("input[name='email']");
				
				if (submit != true && eInp.val() == ''){
					validS.email = false;
					return false;
				}
				if (!validEmail(eInp.val()) || eInp.val() == ''){
					eInp.addClass('err');
					regError(m.ERR_INVALID_EMAIL);
					validS.email = false;
					return false;
				}
				ajax({
					data: {page: 'email_exists', email: eInp.val()},
					success: function(data) {
						if (data.data == true){
							eInp.addClass('err');
							regError(m.ERR_EMAIL_EXISTS);
							validS.email = false;
							signUpForm.find("#forgot_pwd_label").fadeIn("fast");
						} else {
							validS.email = true;
							if (submit == true){
								signUpForm.submit();
							}
							signUpForm.find("#forgot_pwd_label").fadeOut("fast");
							hRegError();
						}
					}
				});
				return true;
			}
			
			function checkScreenname(submit){
				sInp = signUpForm.find("input[name='screenname']");
				
				if (submit != true && sInp.val() == ''){
					validS.screenname = false;
					return false;
				}
				
				if (!validScreenName(sInp.val()) || sInp.val() == ''){
					sInp.addClass('err');
					regError(m.ERR_INVALID_SCREENNAME);
					validS.screenname = false;
					return false;
				} else {
					sInp.removeClass('err');
					hRegError();
					validS.screenname = true;
					if (submit == true){
						signUpForm.submit();
					}
				}
			}
			
			function checkPassword(submit){
				p1Inp = signUpForm.find("input[name='password']");
				if (submit != true && p1Inp.val() == ''){
					validS.psw1 = false;
					return false;
				}
				if (p1Inp.val().length < 4){
					p1Inp.addClass('err');
					regError(m.ERR_PASS_TO_SHORT);
					validS.psw1 = false;
					return false;
				} else {
					p2Inp = signUpForm.find("input[name='password2']");
					if (p1Inp.val() == p2Inp.val()){
						p2Inp.removeClass('err');
						validS.psw2 = true;
					}
					p1Inp.removeClass('err');
					hRegError();
					validS.psw1 = true;
					if (submit == true){
						signUpForm.submit();
					}
				}
			}
			
			function checkPassword2(submit){
				p2Inp = signUpForm.find("input[name='password2']");
				p1Inp = signUpForm.find("input[name='password']");
				if (submit != true && p2Inp.val() == ''){
					validS.psw2 = false;
					return false;
				}
				if (p1Inp.val() != p2Inp.val()){
					p2Inp.addClass('err');
					regError(m.ERR_PASS_NOT_MATCH_RETYPE);
					validS.psw2 = false;
					return false;
				} else {
					p2Inp.removeClass('err');
					hRegError();
					validS.psw2 = 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 = o.terminal;
				}
				if (typeof $.userApi.sessionId != 'undefined' && $.userApi.sessionId != ''){
					d.data.PHPSESSID = $.userApi.sessionId;
				}
				
				if ($.userApi.rightLoaded == false){
					d.data.loadRight = true;
				}
				$.ajax({
					url: o.apiUrl + o.ajaxUrl,
					type: o.ajaxType,
					dataType: o.ajaxDataType,
					data: d.data,
					success: function(data){
						if (data.code == 300){
							$.userApi.rightLoaded = false;
							$.userApi.replaceApiHeader(data.data.header);
							location.href = data.data.redirect;
							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: o.apiUrl+"images/ajax-loader.gif", '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: o.apiUrl+"images/ajax-loader-"+color+".gif"});
				c.append(i);
				elem.hide().after(c);
				return c;
			}
			
			containerHtmlTimeout = null;
			function containerHtml(d){
				if ($.userApi.rightLoaded == false){
					l = $("<div />").addClass("left");
					r = $("<div />").addClass("right");
					c = $("<div />").addClass("content");
					if (d.left == ''){
						d.left = '&nbsp;';
					}
					l.html(d.left);
					r.html(d.right);
					c.append(l).append(r).append($("<br />").addClass("uclear"));
					container.html("").append(c).fadeIn(400);
					if (d.logged == true){
						
					} else {
						loginSignupInit();
					}
					container.find("a.colapse").click(function(){
						$.userApi.colapse();
					});
					$.userApi.rightLoaded = true;
					r.find('a').each(function(){$.userApi.analyticsDomainCheck($(this))});
				} else {
					l = container.find("div.left");
					l.html(d.left);
					l.hide().fadeIn(400);
				}
				l.find('a').each(function(){$.userApi.analyticsDomainCheck($(this))});
				
				if (typeof UA_OnLoadContent == 'function'){
					UA_OnLoadContent(container);
				}
			}
			
		};
	
})(jQuery);

$(document).ready(function(){
	ua = $("#"+$.userApi.containerId);
	ua.hide().addClass("userApi").html("");
	uaHeader = $("#userApiHeader");
	$.userApi.initHeader(uaHeader);
	if ($.browser.msie && $.browser.version <= 6){
		$.userApi.loadCss($.userApi.apiUrl + 'css/ie6.css');
	}
	
	$('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();
});
