function trace()
{
	try{
		console.log.apply(null, arguments);
	}catch(e){}
}

function testVisibility(item)
{
	return $(item).is(":visible");
}

function indexOf(eleArray, item)
{
	var l=eleArray.length;
	for(var i=0;i<l;i++)
	{
		if(eleArray[i]==item)
		return i;
	}
	return -1;
}
function generateNumberArray(start,end,reversed){
	var data=[];
	var count=0;
	for(var i=start;i<=end;i++)
	{
		data[count]=i;
		count++;
	}
	if (reversed)data.reverse();
	return data;
}
function filter(eleArray, newFilter, backwards)
{
	var l=eleArray.length;
	if(backwards)
	{
		for(var i=l-1;i>=0;i--)
		{
			if(newFilter(eleArray[i]))
			return i;
		}
	}
	else
	{
		for(var i=0;i<l;i++)
		{
			if(newFilter(eleArray[i]))
			return i;
		}
	}
	return -1;
}

function decodeUrlVariables(data)
{
	var split=data.split('&');
	var l=split.length;
	var result={};
	for(var i=0;i<l;i++)
	{
		var value=split[i];
		var valueSplit=value.split('=');
		result[unescape(valueSplit[0])]=unescape(valueSplit[1]);
	}
	
	return result;
}

function encodeUrlVariables(data)
{
	var result="";
	var init=true;
	for(var key in data)
	{
		if (init)
			init=false;
		else
			result+='&';
		result+=key+'='+data[key];
	}
	
	return result;
}

function addString(str, length, char)
{
	var c=length-String(str).length;
	for(var i=0;i<c;i++)
		str=char+str;
	return str;
}

function redirect(url)
{
	document.location=url;
}

function reload()
{
	document.location.reload();
}

function random(max, min, rounder)
{
	if (!min)
		min=0;
	if (!rounder)
		rounder=Math.floor;
	return min+rounder(Math.random()*(max-min));
}

function isEmail(text)
{
	var emailPattern =/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;  
    return emailPattern.test(text); 
}

function createCookie(name,value,days) {
	if (days)
	{
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

function track(action, target, value)
{
	var data={action:action,target:target};
	if (value!=null)
		data.value=value;
	requestApi('track', data);
}

function requestApi(command, requestData, handler)
{
	var dataType=requestData ? requestData.__encoding : null;
	$.ajax({
	  url: getUrl('api/'+command+'/'),
	  data: requestData,
	  type: 'POST',
	  dataType: dataType,
	  success: function(data) {
		if (handler)
		{
			if (!dataType)
				data=decodeUrlVariables(data);
			handler(data);
		}
	  }
	});
}

function rewriteAttr(selector, setAttr, getAttr)
{
	var target=$(selector);
	target.attr(setAttr, target.attr(getAttr));
	return target;
}

function exportKeys(data, keysToExport)
{
	var newData=[];
	var l=keysToExport.length;
	var j=0;
	for(var i=0;i<l;i++)
	{
		if (key in data)
			newData[j++]={key:key, value:data[key]};
	}
	return newData;
}

function doTemplate(templateSelector, data, dataSetter, appendList)
{
	var hasData=(typeof data != 'number');
	var l=!hasData ? data : data.length;
	var template;
	var list;
	if (typeof templateSelector == 'string')
	{
		template=$($(templateSelector).get(0));
		list=template.parent();
	}
	else
	{
		template=templateSelector.template;
		list=templateSelector.list;
		if (typeof list == 'string')
			list=$(list);
	}
	
	if (!appendList)
		list.empty();
	for(var i=0;i<l;i++)
	{
		var newTemplate=template.clone();
		if (dataSetter){
			var chunk=hasData ? data[i] : i;
			dataSetter.apply(newTemplate, [chunk]);
		}
		list.append(newTemplate);
	}
	
	return template;
}

function configureInputFields(selector, onInit, onFocus, onChange, onBlur)
{
	var input='input';
	var initValue='initValue';
	var value='value';
	var resetOn='';
	var jSelector=$(selector);
	filter(jSelector, function(item){
		$.data(item, initValue, $(item).attr(value));
		$.data(item, input, false);
		if(onInit)onInit(item);
	});
	jSelector.focus(function(){
		if ($.data(this, input)==false)
		{
			$(this).attr(value, resetOn);
			if(onFocus)onFocus(this);
		}
		return true;
	});
	jSelector.change(function(){
		checkChange.apply(this);
	});
	jSelector.keypress(function(){
		checkChange.apply(this);
	});
	jSelector.keydown(function(){
		checkChange.apply(this);
	});
	jSelector.keyup(function(){
		checkChange.apply(this);
	});
	function checkChange(){
		$.data(this, input, $(this).attr(value).length>0);
		if(onChange)onChange(this);
		return true;
	};
	$(selector).blur(function(){
		if ($.data(this, input)==false)
		{
			$(this).attr(value, $.data(this, initValue));
			if(onBlur)onBlur(this);
		}
		return true;
	});
}

function testInput(selector, handler, restrictType, minLength, maxLength, filter)
{
	var jSelector=$(selector);
	jSelector.change(check);
	jSelector.keypress(check);
	jSelector.keydown(check);
	jSelector.keyup(check);
	
	for(var i=0;i<jSelector.length;i++)
	{
		$.data(jSelector.get(i), 'testHandler', checkChange);
	}
	function check()
	{
		var status=checkChange(this);
		handler(status);
		//return filter && (status=='restrict' || status=='max') ? false : true;
	}
	function checkChange(target)
	{
		var jTarget=$(target);
		var value=jTarget.attr('value');
		var error;
		
		if (value.length>0 && restrictType)
		{
			var rMatch=value.match(restrictType);
			if (!rMatch || rMatch.length!=value.length)
			{
				if (filter)
					jTarget.attr('value',rMatch ? rMatch.join('') : '');
				error='restrict';
			}
		}
		if (minLength && value.length<minLength)
			error=error ? error : 'min';
		if (maxLength && value.length>maxLength)
		{
			if (filter)
				jTarget.attr('value',value.substr(0,maxLength));
			error=error ? error : 'max';
		}
		
		return error ? error : 'ok';
	}
}

function inputStatus(target, isElement)
{
	target=isElement ? target : target.get(0);
	var handler=$.data(target, 'testHandler');
	return handler(target);
}

function hasInput(target, isElement)
{
	return $.data(isElement ? target : target.get(0), 'input');
}

function linkToCheckbox(selector, checkbox)
{
	$(selector).click(function(){
		var object=$(checkbox).get(0);
		object.checked=!object.checked;
		return false;
	});
}

function setCheckbox(selector, value)
{
	$(selector).get(0).checked=value;
}

function isChecked(checkboxSelector)
{
	return $(checkboxSelector).get(0).checked;
}

function getZodiac(date, returnName)
{
	var day=date.getDate();
	var month=date.getMonth()+1;
	var index=[[20,3,'aries'],[20,4,'taurus'],[21,5,'gemini'],[21,6,'cancer'],[22,7,'leo'],[23,8,'virgo'],[23,9,'zibra'],[23,10,'scorpio'],[22,11,'sagittarious'],[22,12,'capricorn'],[20,1,'aquarius'],[18,2,'pisces']];
	for(var i=0;i<index.length;i++)
	{
		if (month==index[i][1])
		{
			if (day<index[i][0])
			{
				if (i==0)i=index.length;
				i--;
			}
			
			return returnName ? index[i][2] : i;
		}
	}
}

function getYears(dateOrTime)
{
	dateOrTime=new Date(dateOrTime);
	var today=new Date(getServerTime());	
	return today.getFullYear()-dateOrTime.getFullYear();
}

function getStampOnYears(years)
{
	if (!years)return null;
	var today=new Date(getServerTime());
	var date=new Date(today.getFullYear()-years,0,1);
	return date.getTime()/1000;
}

function bitwiseIndex(value,length,toMap){
	if (!value)return null;
	var rez=[];
	var binary=2;
	for(var i=0;i<length;i++){
		if ((binary & value) != 0)
		{
			if (toMap)
				rez[i]=true;
			else
				rez.push(i);
		}
		binary*=2;
	}
	return rez.length>0 ? rez : null;
}

function track(action, target, value)
{
	var loc=document.location+'';
	requestApi('track', {action:action, target:target, value:value, uri:loc});
}

/*
* SMUCHKA SCRIPTS
*/

function getDisplayName(userData)
{
	var name;
	if (parseInt(userData.showUsername))
		name=userData.username;
	else
	{
		name=userData.name;
		if (name && userData.surname)name+=' ';
		name+=userData.surname;
	}
	return name || userData.username;
}

function addFriend(friend, handler)
{
	var requestData={friend:friend};
	requestApi('addFriend', requestData, function(data){
		switch(data.err)
		{
			case 'success':
				areFriends=1;
				if (handler)
					handler(friend);
				break;
		}
	});
}

function removeFriend(friend, handler)
{
	var requestData={friend:friend};
	requestApi('removeFriend', requestData, function(data){
		switch(data.err)
		{
			case 'success':
				areFriends=0;
				if (handler)
					handler(friend);
				break;
		}
	});
}

function changeLang(lang)
{
	requestApi('changeLang', {lang:lang}, function(data){
		reload();
	});
}

function parseAvatarContent(target, data, parseInfo)
{
	var frame='<div class="frame"></div>';
	var imgsrc=data.embedPath ? data.img : getImagePath(data.img);
	if (imgsrc==null)imgsrc='';
	var avatar='<img class="avatar'+(imgsrc ? '' : ' hidden')+'" '+(imgsrc ? 'src="'+imgsrc+'"' : '')+'/>';
	if (data.isVip=='1')avatar+='<div class="vip-mark"></div>';
	var html=frame;
	target.html(avatar);
	if (parseInfo)
	{
		var info='<div class="user-info"><div class="user-info-background"></div></div>';
		target.append(info);
		target.append(frame);
		var userInfoContent='<div class="user-info"><div class="user-info-content"></div></div>';
		target.append(userInfoContent);
		var infoJ=$('.user-info', target);
		target.hover(function(){
			infoJ.animate({bottom:0},{queue:false});
		},
		function(){
			infoJ.animate({bottom:-infoJ.height()},{queue:false});
		});
		infoJ.css('bottom',-(infoJ.height() || 155));
	}
	else
		target.append(frame);
	
	if (data.user)target.attr('href', getUrl('page/profile/'+data.user+'/'));
	if (parseInfo)parseInfo(target, data);
}

function parseInfo(target, data)
{
	var info=$('.user-info-content', target);
	var user=data.user;
	data.username=data.user;
	data.displayName=getDisplayName(data);
	var username='<div class="info-username">'+data.displayName+'</div>';
	var status='<div class="info-status"><img/><span></span></div>';
	var addinfocontent=siteStrings.at+' '+data.years+' '+siteStrings.ageMeasure;
	if (data.town)addinfocontent+=' <span style="text-transform:lowercase">'+siteStrings.from+'</span> '+data.town;
	var addinfo='<div class="info-addinfo">'+addinfocontent+'</div>';
	
	info.append(username);
	info.append(status);
	info.append(addinfo);
	
	var infoStatus=$('.info-status',info);
	var infoStatusImg=$('img',infoStatus);
	var infoStatusText=$('span',infoStatus);
	switch(data.status)
	{
		case 1:
			infoStatusImg.attr('src',getImagePath('dnd.png'));
			infoStatusText.html(siteStrings.dnd);
			break;
		case 2:
			infoStatusImg.attr('src',getImagePath('offline.png'));
			infoStatusText.html(siteStrings.offline);
			break;
		case 3:
			infoStatusImg.attr('src',getImagePath('away.png'));
			infoStatusText.html(siteStrings.away);
			break;
		default:
			infoStatusImg.attr('src',getImagePath('online.png'));
			infoStatusText.html(siteStrings.online);
	}
	if (isLogged)
	{
		var iconRow='<div class="info-icons">';
		iconRow+='<img class="send-message-icon" src="'+getImagePath('letter.png')+'" title="'+siteStrings.sendMessageTo+' '+data.displayName+'"/>';
		data.user=data.displayName;
		iconRow+='<img class="request-friend-icon" src="'+getImagePath('friends-request.png')+'" title="'+processString(siteStrings.inviteFriendDialog,data)+'"/>';
		data.user=user;
		if (data.gallery)iconRow+='<img class="view-gallery" src="'+getImagePath('pictures.png')+'" title="'+siteStrings.galleryOf+' '+data.displayName+'"/>';
		if (data.user!==_userData.username)
		{
			data.user=data.displayName;
			iconRow+='<img class="chat-icon" src="'+getImagePath('chat-icon.png')+'" title="'+processString(siteStrings.inviteToChat,data)+'"/>';
			data.user=user;
		}
		iconRow+='</div>';
		info.append(iconRow);
		$('.chat-icon',info).click(function(){
			inviteToChat(data.user);
			return false;
		});
		setMessageBox($('.send-message-icon',info),data.user);
		setConfirmBox($('.request-friend-icon',info),processString(siteStrings.inviteFriendDialog,data),'',function(){
			requestApi('addFriend',{friend:data.user},function(data){
				
			});
		});
		if (data.gallery)
		{
			$('.view-gallery',info).click(function(){
				redirect(getUrl('page/gallery/'+data.user+'/'+data.gallery+'/'));
				return false;
			});
		}
	}
}

function setProfilePopupInfo(target, data, cls, disableImage, align)
{
	var html=generateBubblePopupContent(data, cls, disableImage);
	return createBubblePopup(target, html, null, align);
}
function generateBubblePopupContent(data, cls, disableImage)
{
	var html='<div class="profile-popup-info'+(cls ? ' '+cls : '')+'">';
	var url=getUrl('page/profile/'+data.username);
	if (!disableImage)
	{
		var imgurl=(data.gallery && data.avatarId ? getUrl('gallery/'+data.gallery+'/'+data.avatarId+'/tiny.jpg') : '');
		var img='<img class="avatar'+(imgurl ? '' : ' hidden')+'" '+(imgurl ? 'src="'+imgurl+'"' : '')+'/>';
		if (data.isVip=='1')img+='<div class="vip-mark"></div>';
		html+='<div class="'+(data.sex==1 || data.sex==3 ? 'women-container' : 'men-container')+'"><div class="picture51"><a class="picture" href="'+url+'">'+img+'<div class="frame"></div></a></div></div>';
	}
	html+='<div class="info-container">';
	html+='<div class="info-username"><a href="'+url+'">'+getDisplayName(data)+'<a/></div>';
	html+='<div class="info-meta"><span style="text-transform: capitalize;">'+(siteStrings[data.sex==1 || data.sex==3 ? 'female' : 'male'])+'</span> <span style="text-transform: lowercase;">'+siteStrings.at+'</span> '+getYears(data.birth*1000)+' '+siteStrings.ageMeasure+' <span style="text-transform: lowercase">'+siteStrings.from+'</span> '+(siteStrings['city_'+data.city] || data.city)+'</div>';
	var looksFor=bitwiseIndex(data.looksForSex,5);
	if (looksFor)
	{
		for(var i=0;i<looksFor.length;i++)
			looksFor[i]=siteStrings['sex_'+looksFor[i]];
		looksFor=looksFor.join(', ');
	}
	else
		looksFor='';
	html+='<div class="info-looksForSex">'+siteStrings.looksForSex+' '+looksFor+'</div>';
	html+='</div></div>';
	return html;
}

function createBubblePopup(target, html, theme, align, selectable, options, afterShown, afterHidden)
{
	var o={
		alwaysVisible:false,
		selectable: selectable,
		align: align || 'center',
		position: 'top',
		innerHtml: html, 
		innerHtmlStyle: {color:'#FFFFFF', 'text-align':'center'},
		themeName: theme || 'grey',
		themePath: getUrl('images/jquerybubblepopup-theme'),
		afterShown:afterShown,
		afterHidden:afterHidden
	};
	if (options){
		for(var key in options)o[key]=options[key];
	}
	target.CreateBubblePopup(o);
	var id=target.GetBubblePopupID();
	return $('#'+id);
}

var cachedHash;
function onHashChange(handler)
{
	cachedHash=location.hash;
	setInterval(checkHash,30);
	
	function checkHash()
	{
		var hash=location.hash;
		if (hash!=cachedHash)
		{
			cachedHash=hash;
			handler();
		}
	}
}
function getHash(){return location.hash.substr(1);}
function setHash(hash, setCache){
	location.hash='#'+hash;
	if (setCache!==false)cachedHash=location.hash;
}
function getHashParams()
{
	var vars=getHash();
	if (vars!=='')
		return decodeUrlVariables(vars);
	return null;
}
function setHashParams(params, setCache){setHash(encodeUrlVariables(params), setCache);}

function searchUser(handler, select, limit, intervalLength)
{
	var lastval;
	var interval;
	if (!intervalLength)intervalLength=400;
	
	function doSearch(value, notin, count, offset, strict, minLength){
		var lv=lastval;
		lastval=value;
		minLength=minLength || 2;
		if (value.length<minLength || (strict && lv==value))return;
		window.clearTimeout(interval);
		interval=setTimeout(function(){
			value=value.split('_').join('!_');
			value=value.split('%').join('!%');
			value=value.split(' ').join('%');
			notin=notin ? notin.split(';').join('","') : null;
			if (notin)notin='"'+notin+'"';
			var searchParams={
				select:select,
				limit:count || limit,
				offset:offset || 0,
				order:'username',
				dontCount:1,
				mergeWord:'or',
				where:{
					username:'%'+value+'%',
					name:'%'+value+'%',
					surname:'%'+value+'%'
					},
				equationMap:{
					username:[(notin ? 'not in ('+notin+') and username ' : '')+'like'],
					name:[(notin ? 'not in ('+notin+') and name ' : '')+'like'],
					surname:[(notin ? 'not in ('+notin+') and surname ' : '')+'like']
					}
			};
			var requestData={query:searchParams,__encoding:'json'}
			requestApi('search', requestData, handler);
		}, intervalLength);
	}
	return doSearch;
}

function stripHtml(text, allowTags)
{
	var map={};
	if (allowTags)
	{
		for(var i=0;i<allowTags.length;i++)
			map[allowTags[i]]=true;
	}
	if (!map.br){
		text = text.replace(new RegExp("</?br/?>", "gi"), "\n");
	}
	if (!map.li)text = text.replace(new RegExp("<li/>", "gi"), "\n");
	if (!map.p)
	{
		text = text.replace(new RegExp("<p[^>]*>", "gi"), "\n");
		text = text.replace(new RegExp("</p>", "gi"), "\n");
	}
	var allowed=allowTags ? '[^'+allowTags.join('][^')+']' : '';
	return text.replace(new RegExp("<"+allowed+"[^>]*>", "gi"), "");
}
var defaultStripTags=['br','a','img','span'];
function defaultStrip(text)
{
	text=stripHtml(text, defaultStripTags);
	text = text.replace(new RegExp("</?br/?>", "gi"), "\n");
	text=linkageText(text,"class='text-link' target='_blank'");
	text = text.replace(new RegExp("\n", "gi"), "<br/>");
	return text;
}

function linkageText(text, attrs)
{
	var p=/(\swww.[^\s]*)|(\sftp:\/[^\s]*)|(\shttp:\/\S*)/gi;
	if (attrs)attrs=' '+attrs;
	text=' '+text;
	text=text.replace(p, function(str){
		var first=str.charAt(0);
		str=str.substr(1);
		var link=str;
		if (link.substr(0,4)=='www.')link='http://'+link;
		return first+"<a href='"+link+"'"+attrs+">"+str+"</a>";
	});
	return text.substr(1);
}

function processString(text, processor)
{
	if (!processor)processor=eval;
	var type=typeof processor;
	text = text.replace(new RegExp("<![^>]*>", "gi"), function(str){
		str=str.substring(2,str.length-1);
		var processed;
		var noValue;
		str=str.replace(new RegExp("\\{[^\\}]*\\}", "gi"), function(str){
			str=str.substring(1,str.length-1);
			var isCond=str.charAt(0)=='?';
			if (isCond)str=str.substr(1);
			processed=true;
			var val;
			if (type==='object')
				val=processor[str];
			else if (type==='string')
				val=processor;
			else val=processor(str);
			if (!noValue)noValue=val ? false : true;
			return isCond ? '' : val;
		});
		if (processed)return noValue ? '' : str;
		if (type==='object')
			return processor[str];
		else if (type==='string')
			return processor;
		return processor(str);
	});
	return text;
}

function escapeQuotes(text)
{
	text = text.replace(new RegExp("\'|\"", "gi"), function(str){
		return escape(str);
	});
	return text;
}

var emotIcons={
	'smile':{url:'emoticon-0100-smile',reg:[':)',':-)']},
	'sad':{url:'emoticon-0101-sadsmile',reg:[':(']},
	'laugh':{url:'emoticon-0102-bigsmile',reg:[':D']},
	'cool':{url:'emoticon-0103-cool',reg:['8-)']},
	'surprised':{url:'emoticon-0104-surprised',reg:[':O']},
	'wink':{url:'emoticon-0105-wink',reg:[';)']},
	'cry':{url:'emoticon-0106-crying',reg:[';(']},
	'sweat':{url:'emoticon-0107-sweating',reg:[]},
	'speechless':{url:'emoticon-0108-speechless',reg:[':|']},
	'kiss':{url:'emoticon-0109-kiss',reg:[':*']},
	'tongueout':{url:'emoticon-0110-tongueout',reg:[':P']},
	'blush':{url:'emoticon-0111-blush',reg:[]},
	'wonder':{url:'emoticon-0112-wondering',reg:[':^(']},
	'sleepy':{url:'emoticon-0113-sleepy',reg:['|-)']},
	'dull':{url:'emoticon-0114-dull',reg:['|-(']},
	'love':{url:'emoticon-0115-inlove',reg:['(inlove)']},
	'evil':{url:'emoticon-0116-evilgrin',reg:[']:)']},
	'talk':{url:'emoticon-0117-talking',reg:[]}/*,
	'yawn':{url:'emoticon-0118-yawn',reg:[]},
	'puke':{url:'emoticon-0119-puke',reg:[]},
	'doh':{url:'emoticon-0120-doh',reg:[]},
	'angry':{url:'emoticon-0121-angry',reg:[':@']},
	'wasntme':{url:'emoticon-0122-itwasntme',reg:[]},
	'party':{url:'emoticon-0123-party',reg:[]},
	'worry':{url:'emoticon-0124-worried',reg:[':S']},
	'mm':{url:'emoticon-0125-mmm',reg:['(mmm)','(mmmm)']},
	'nerd':{url:'emoticon-0126-nerd',reg:['8-|']},
	'sealed':{url:'emoticon-0127-lipssealed',reg:[':x']},
	'hi':{url:'emoticon-0128-hi',reg:['(wave)']},
	'call':{url:'emoticon-0129-call',reg:[]},
	'devil':{url:'emoticon-0130-devil',reg:[]},
	'angel':{url:'emoticon-0131-angel',reg:[]},
	'envy':{url:'emoticon-0132-envy',reg:[]},
	'wait':{url:'emoticon-0133-wait',reg:[]},
	'hug':{url:'emoticon-0134-bear',reg:['(bear)']},
	'makeup':{url:'emoticon-0135-makeup',reg:[]},
	'giggle':{url:'emoticon-0136-giggle',reg:['(chuckle)']},
	'clap':{url:'emoticon-0137-clapping',reg:[]},
	'think':{url:'emoticon-0138-thinking',reg:[]},
	'bow':{url:'emoticon-0139-bow',reg:[]},
	'rofl':{url:'emoticon-0140-rofl',reg:[]},
	'whew':{url:'emoticon-0141-whew',reg:[]},
	'happy':{url:'emoticon-0142-happy',reg:[]},
	'smirk':{url:'emoticon-0143-smirk',reg:[]},
	'nod':{url:'emoticon-0144-nod',reg:[]},
	'shake':{url:'emoticon-0145-shake',reg:[]},
	'punch':{url:'emoticon-0146-punch',reg:[]},
	'emo':{url:'emoticon-0147-emo',reg:[]},
	'yes':{url:'emoticon-0148-yes',reg:['(y)']},
	'no':{url:'emoticon-0149-no',reg:['(n)']},
	'handshake':{url:'emoticon-0150-handshake',reg:[]},
	'skype':{url:'emoticon-0151-skype',reg:[]},
	'heart':{url:'emoticon-0152-heart',reg:['(h)']},
	'brokenheart':{url:'emoticon-0153-brokenheart',reg:['(u)']},
	'mail':{url:'emoticon-0154-mail',reg:['(m)','(e)']},
	'flower':{url:'emoticon-0155-flower',reg:['(f)']},
	'rain':{url:'emoticon-0156-rain',reg:[]},
	'sun':{url:'emoticon-0157-sun',reg:[]},
	'time':{url:'emoticon-0158-time',reg:['(o)']},
	'music':{url:'emoticon-0159-music',reg:[]},
	'movie':{url:'emoticon-0160-movie',reg:['(~)']},
	'phone':{url:'emoticon-0161-phone',reg:['(mp)']},
	'coffee':{url:'emoticon-0162-coffee',reg:[]},
	'pizza':{url:'emoticon-0163-pizza',reg:['(pi)']},
	'cash':{url:'emoticon-0164-cash',reg:['($)']},
	'muscle':{url:'emoticon-0165-muscle',reg:['(flex)']},
	'cake':{url:'emoticon-0166-cake',reg:['(^)']},
	'beer':{url:'emoticon-0167-beer',reg:[]},
	'drink':{url:'emoticon-0168-drink',reg:['(d)']},
	'dance':{url:'emoticon-0169-dance',reg:[]},
	'ninja':{url:'emoticon-0170-ninja',reg:[]},
	'star':{url:'emoticon-0171-star',reg:['(*)']},
	'mooning':{url:'emoticon-0172-mooning',reg:[]},
	'finger':{url:'emoticon-0173-middlefinger',reg:[]},
	'bandit':{url:'emoticon-0174-bandit',reg:[]},
	'drunk':{url:'emoticon-0175-drunk',reg:[]},
	'smoke':{url:'emoticon-0176-smoke',reg:[]},
	'toivo':{url:'emoticon-0177-toivo',reg:[]},
	'rock':{url:'emoticon-0178-rock',reg:[]},
	'headbang':{url:'emoticon-0179-headbang',reg:[]},
	'bug':{url:'emoticon-0180-bug',reg:[]},
	'fubar':{url:'emoticon-0181-fubar',reg:[]},
	'poolparty':{url:'emoticon-0182-poolparty',reg:[]},
	'swear':{url:'emoticon-0183-swear',reg:[]},
	'tmi':{url:'emoticon-0184-tmi',reg:[]}*/
}
var emotTypes;
var emotMap;
var emotIconsFolder='emoticons/';
var emotIconsExt='gif';
function mapEmots()
{
	if (emotMap)return;
	emotMap={};
	emotTypes=[];
	var c=0;
	for(var key in emotIcons){
		var obj=emotIcons[key];
		var url=obj.url;
		key='('+key+')';
		emotMap[key]=url;
		emotTypes[c++]=key;
		var regs=obj.reg;
		var l=regs.length;
		for(var i=0;i<l;i++)
		{
			key=regs[i];
			emotMap[key]=url;
			emotTypes[c++]=key;
		}
	}
}

function processEmot(text)
{
	return text;
	mapEmots();
	text+=' ';
	var regex=/\(|\)/gi;
	for(var i=0;i<emotTypes.length;i++)
	{
		var type=emotTypes[i];
		//trace(type);
		type=type.replace(regex, function (str){
			return '\\'+str;
		});
		type=type.split(')').join('\\)').split('(').join('\\(');
		var regexp=type+'\\s';
		try{
			trace(regexp);
		regexp=new RegExp(regexp,'gi');
		}catch(e){
			trace(e);
			continue;
			}
		text=text.replace(regexp, function(str){
			trace('====',str.length);
			var last=str.charAt(str.length-1);
			str=str.substr(0,str.length-1);
			trace(str,emotMap[str]);
			var url=getImagePath(emotIconsFolder+emotMap[str]+'.'+emotIconsExt);
			str='<img src="'+url+'"/>';
			return str+last;
		});
	}
	return text.substr(0,text.length-1);
}

if (!(Array.prototype.indexOf))
{
	Array.prototype.indexOf=function(target){
		return indexOf(this, target);
	}
}
