var temp_queue = Array();

function Status(details){
	var _self = this;
	
	_self.status_id = null;
	_self.account_id = null;
	_self.thumb = '';
	_self.receive_time = null;
	_self.is_public = 'n';
	_self.original_domain = '';
	_self.status_text = details.status_text;
	_self.expanded_url = details.expanded_url;
	_self.tags = details.tags;
	
	if(details.status_id){
		_self.status_id = details.status_id;
	}
	if(details.account_id){
		_self.account_id = details.account_id;
	}
	if(details.receive_time){
		_self.receive_time = details.receive_time;
	}
	if(details.is_public){
		_self.is_public = details.is_public;
	}
	if(details.original_domain){
		_self.original_domain = details.original_domain;
	}
	if(details.thumb){
		_self.thumb = details.thumb;
	}
	
	this.save = function(callback){
		var call_params = {
			what:'status',
			op:'save',
			status_id:_self.status_id,
			is_public:_self.is_public,
			status_text:_self.status_text,
			expanded_url:_self.expanded_url,
			thumb:_self.thumb,
			tags:_self.tags
		};
		
		var temp_callback = function(data){
			_self.save_callback(data, callback);
		};
		
		make_service_call(call_params, temp_callback);
	};
	
	_self.save_callback = function(data, callback){
		if(data.successfull){
			_self.status_id = data.status.status_id;
			_self.account_id = data.status.account_id;
			_self.receive_time = data.status.receive_time;
			
			if(typeof(callback)=='function'){
				callback(_self);
			}
		}
	};

	_self.copy2cart = function(){
		var call_params = {
			what:'account',
			op:'add2temp_queue',
			status:_self.status_text,
			tags:_self.tags,
			thumb:_self.thumb,
			original_url:_self.expanded_url
		};
		
		make_service_call(call_params, _self.copy2cartCallback);
	}
	
	_self.extraCampCnt = false;
	_self.add2extraCampaign = function(selectionPlh, excludeCampaign, campaigns){
		if(typeof(campaigns)!='object'){
			var tmpCbk = function(campaigns, available){
				_self.add2extraCampaign(selectionPlh, excludeCampaign, campaigns)
			}
			
			Campaign.get(0, 100, 'active', excludeCampaign, tmpCbk);
			return;
		}
		
		if(arrayCount(campaigns)==0){
			error_message('No other active campaign found');
			return;
		}
		
		if(_self.extraCampCnt){
			_self.extraCampCnt.parentNode.removeChild(_self.extraCampCnt);
		}
		
		_self.extraCampCnt = document.createElement('div');
		_self.extraCampCnt.className = 'campSelCnt';
		selectionPlh.appendChild(_self.extraCampCnt);
		for(var i in campaigns){
			var tmpCamp = campaigns[i];
		
			var tmpOpt = document.createElement('div');
			tmpOpt.camp = tmpCamp;
			tmpOpt.innerHTML = tmpCamp.name;
			tmpOpt.onclick = function(){
				this.camp.add_status(_self.status_id);
				selectionPlh.removeChild(_self.extraCampCnt);
				_self.extraCampCnt = false;
				info_message('status successfully added to &quot;'+tmpCamp.name+'&quot; campaign');
			};
			_self.extraCampCnt.appendChild(tmpOpt);
		}
	}
	
	_self.copy2cartCallback = function(data){
		if(typeof(data)=='object'){
			if(data.successfull){
				info_message('Successfully added to message basket');
			}
			else{
				error_message(data.error);
			}
		}
		else{
			error_message('Adding to the message basket failed');
		}
	}
	
	_self.edit = function(plh, viewCnt){
		jQplh = $(plh);
		jQviewCnt = $(viewCnt);
		
		jQviewCnt.hide();
		
		var editCnt = document.createElement('div');
		editCnt.className = 'tmb_space';
		if(jQplh.attr('id')==jQviewCnt.parent().attr('id')){
			jQviewCnt.after(editCnt);
		}
		else{
			jQplh.append(editCnt);
		}
		
		var finish = function(){
			_self.status_text = $(editTxt).val();
			_self.save();
			
			jQviewCnt.html(_self.status_text);
			jQviewCnt.show();
			$(editCnt).remove();
			
			if(_self.status_text.length>140){
				jQplh.addClass('itemWarn');
			}
			else{
				jQplh.removeClass('itemWarn');
			}
		}
		
		
		var textareaId = ('statusEditTxt'+Math.random()).replace('.', '');
		
		var translitCnt = document.createElement('div');
		editCnt.appendChild(translitCnt);
		
		var translitLbl = document.createElement('span');
		translitLbl.innerHTML = 'Transliteration ';
		translitCnt.appendChild(translitLbl);
		
		var translitSelect = document.createElement('select');
		var tmpOpt = document.createElement('option');
		tmpOpt.value = 'en';
		tmpOpt.innerHTML = 'none';
		translitSelect.appendChild(tmpOpt);
		for(var i in Status.translitLangs){
			tmpOpt = document.createElement('option');
			tmpOpt.value = i;
			tmpOpt.innerHTML = Status.translitLangs[i];
			translitSelect.appendChild(tmpOpt);
		}
		translitSelect.onchange = function(){
			Status.setTranslitLang($(this).val());
			Status.applyTranslit(textareaId);
		}
		translitCnt.appendChild(translitSelect);
		
		
		var editTxt = document.createElement('textarea');
		editTxt.style.width = '99%';
		editTxt.style.height = '3em';
		editTxt.id = textareaId;
		$(editTxt).val(_self.status_text);
		editCnt.appendChild(editTxt);
		
		var ftCnt = document.createElement('div');
		editCnt.appendChild(ftCnt);
		
		var saveBtn = document.createElement('a');
		saveBtn.onclick = finish;
		ftCnt.appendChild(saveBtn);
		
		var saveImg = document.createElement('img');
		saveImg.src = SITE_URL+'/images/icon/16/filesave.png';
		saveImg.align = 'absmiddle';
		saveBtn.appendChild(saveImg);
		saveBtn.innerHTML += ' Save';
		$(saveBtn).button();
	}
	
	_self.del = function(){
		if(confirm('Permanently delete this status?')){
			var call_params = {
				what:'status',
				op:'delete',
				status_id:_self.status_id
			};
			
			make_service_call(call_params, Status.default_callback);
		}
	}
}

Status.variationsEnabled = true;
Status.shareEnabled = true;

Status.default_callback = function(data){
	if(typeof(data)=='object'){
		if(data.successfull){
			window.location.href=window.location.href;
		}
		else if(typeof(data.error)=='string' && data.error){
			alert(data.error);
		}
	}
};

Status.create4queue = function(plh, options){
	Status.variationsEnabled = false;
	var mesage_obj = new Status.from_link({href:'',title:''}, plh);
	var add_btn = mesage_obj.get_add_button();
	var container = mesage_obj.get_link_item_container();
	container.style.width = 'auto';
	
	var old_onclick = add_btn.onclick;
	add_btn.onclick = function(){
		old_onclick();
		Status.create4queue(plh, options);
	};
	
	mesage_obj.edit();
	Status.last4queue = mesage_obj;
}

Status.finish4queue = function(callback){
	var retVal = true;
	if(typeof(Status.last4queue)=='object' && Status.last4queue.get_tweet_text()){
		var tmpCbk = function(option){
			if(option=='add'){
				Status.last4queue.finish_edit();
				var tmp = Status.last4queue.get_add_button();
				tmp.onclick();
				
				setTimeout(callback, 2000);
			}
			else{
				callback();
			}
		}
		
		fan_window.confirm('Your message was not added to basket!', {add:'Add message to basket', cancel:'Continue without adding'}, tmpCbk);
		
		retVal = false;
	}
	
	if(retVal){
		callback();
	}
	
	return retVal;
}

Status.saveTemp = function(){
	if(!logged_in){
		authenticate();
		return;
	}
	
	var call_params = {
		what:'status',
		op:'save_temp'
	};

	make_service_call(call_params, Status.saveTempCallback);
}

Status.saveTempCallback = function(data){
	if(typeof(data)=='object'){
		if(data.successfull){
			window.location.href=SITE_URL+'/account';
		}
		else if(typeof(data.error)=='string' && data.error){
			alert(data.error);
		}
	}
}

Status.from_link = function(link_details, links_container, is_variation){
	var _self = this;
	
	var temp_tags_input_val = 'tags';
	var default_url_input_value = 'URL';
	
	var original_url = link_details.href;
	var thumb_url = '';
	var variations = [];
	var variations_container;
	var title = typeof(link_details.title)=='string'?link_details.title:'';
	var keywords = typeof(link_details.tags)=='string'?link_details.tags:'';
	var description = typeof(link_details.description)=='string'?link_details.description:'';
	
	function create_variation(){
		var tags = _self.get_tags();
		var tags_arr = tags.split(",");
		
		for(var i=0; i<tags_arr.length; i++){
			tags_arr[i] = jQuery.trim(tags_arr[i]);
		}
		
		function add_variation(suggTxt){
			if(!suggTxt){
				alert('You cannot create an empty variation!');
				return;
			}
		
			if(!variations_container){
				variations_container = document.createElement('div');
				variations_container.className = 'variations_container';
				$(link_item_container).after(variations_container);
			}
			
			var variationDetails = link_details;
			variationDetails.title = suggTxt;
			
			var variation = new Status.from_link(variationDetails, variations_container, true);
			
			variations.push(variation);
		}
		
		function Tag(tag){
			var _tag = this;
		
			var tmpOpt = document.createElement('li');
			tmpOpt.tagVal = tag;
			
			var valDisplay = document.createElement('span');
			valDisplay.innerHTML = tag;
			tmpOpt.appendChild(valDisplay);
			
			this.add = function(){
				setTagsSel.appendChild(tmpOpt);
				addBtn.style.display = 'none';
				cancelBtn.style.display = '';
				suggestion.showSuggestedTxt();
			};
			
			this.remove = function(){
				allTagsSel.appendChild(tmpOpt);
				addBtn.style.display = '';
				cancelBtn.style.display = 'none';
				suggestion.showSuggestedTxt();
			};
			
			var addBtn = document.createElement('img');
			addBtn.src = SITE_URL+'/images/icon/16/edit_add.png';
			addBtn.align = 'right';
			addBtn.title = 'add';
			addBtn.onclick = this.add;
			tmpOpt.appendChild(addBtn);
			
			var cancelBtn = document.createElement('img');
			cancelBtn.src = SITE_URL+'/images/icon/16/cancel.png';
			cancelBtn.align = 'right';
			cancelBtn.title = 'remove';
			cancelBtn.style.display = 'none';
			cancelBtn.onclick = this.remove;
			tmpOpt.appendChild(cancelBtn);
			
			allTagsSel.appendChild(tmpOpt);
		}
		
		Tag.getSelected = function(){
			var tags = [];
			var elems = jQuery(setTagsSel).children();
			for (var i=0; i<elems.length; i++){
				var tempElem = elems.get(i);
				tags.push(tempElem.tagVal);
			}
			
			return tags;
		};
					
		function info(message, fadeTime){
			if(typeof(fadeTime)!='number'){
				fadeTime = 5000;
			}
			
			footerInfo.innerHTML = '';
			
			var msgItem = document.createElement('div');
			msgItem.innerHTML = message;
			jQuery(footerInfo).prepend(msgItem);
			
			if(fadeTime){
				jQuery(msgItem).fadeOut(fadeTime, "linear");
			}
		}
		
		function Suggestion(){
			var selectedTpl = 0;
			var suggTxt = '';
			var _selfSuggestion = this;
			var templates = variation_suggestions;
			var cookieTplName = 'variationTpl_';
			var usedTags = false;
		
			suggestionCnt.innerHTML = '';
			
			this.setTemplate = function(tplIndex){
				if(tplIndex>=0 && tplIndex<templates.length){
					selectedTpl = tplIndex;
				
					tplPosPlh.innerHTML = (tplIndex+1)+' of '+templates.length;
					_selfSuggestion.showSuggestedTxt();
					_selfSuggestion.showTplTxt();	
				}			
			};
			
			function buildSuggestionText(templateTxt, tags, formatted){
				if(typeof(formatted)!='boolean'){
					formatted = false;
				}
				
				var prefix = '';
				var suffix = '';
				if(formatted){
					prefix = '<b>';
					suffix = '</b>';
				}
				
				var suggTxt = templateTxt;
				
				var urlRegExp = /<url>/;
				suggTxt = suggTxt.replace(urlRegExp, prefix+_self.get_url()+suffix);
				
				var tagRegExp = /<tag>/;
				usedTags = [];
				
				while(tagRegExp.test(suggTxt)){
					if(arrayCount(tags)>0){
						var tagKey = arrayRand(tags);
						var tag = tags[tagKey];
						usedTags.push(tag);
						tags = arrayUnset(tags, tagKey);
						
						suggTxt = suggTxt.replace(tagRegExp, prefix+tag+suffix);
					}
					else{
						suggTxt = '';
					}
				}
				
				return suggTxt;
			}
			
			this.showSuggestedTxt = function(){
				var tags = Tag.getSelected();
				suggTxt = buildSuggestionText(getTplTxt(), tags);
				if(suggTxt){
					enableCreation();
					suggestionText.innerHTML = buildSuggestionText(getTplTxt(), tags, true);
					
					info('Selected keywords used: '+usedTags.join(', '));
				}
				else{
					disableCreation();
					suggestionText.innerHTML = '<span class="suggestError">Not enough keywords selected</span>';
				}
			};
			
			this.showTplTxt = function(){
				var tplTxt = getTplTxt();
				tplTxt = tplTxt.replace(/<tag>/g, '<b>&lt;tag&gt;</b>');
				tplTxt = tplTxt.replace(/<url>/g, '<b>&lt;url&gt;</b>');
				tplText.innerHTML = tplTxt;
			};
			
			function getTplTxt(){
				return templates[selectedTpl];
			} 
			
			function init(){
				for(var i=0; i<templates.length; i++ ){
					var tmp = get_cookie(cookieTplName+i);
					if(typeof(tmp)=='string' && tmp.length>0){
						templates[i] = tmp;
					}
				}
			}
			
			this.editTpl = function(){
				function save(){
					editTplBtn.innerHTML = editTplBtn.oldInnerHTML;
					editTplBtn.onclick = editTplBtn.oldOnclick;
					
					templates[selectedTpl] = tplInput.value;
					_selfSuggestion.setTemplate(selectedTpl);
					
					// save the modified template
					set_cookie(cookieTplName+selectedTpl ,templates[selectedTpl], null, '/');
				}
			
				tplText.innerHTML = '';

				var tplInput = document.createElement('input');
				tplInput.type = 'text';
				tplInput.style.width = '99%';
				tplInput.value = getTplTxt();
				tplText.appendChild(tplInput);
				onEnter(tplInput, save);
				
				editTplBtn.oldInnerHTML = editTplBtn.innerHTML;
				editTplBtn.oldOnclick = editTplBtn.onclick;
				
				editTplBtn.innerHTML = 'done';
				editTplBtn.onclick = save;
				
				info('<b>&lt;tag&gt;</b> Will be replaced with selected <i>keywords</i> and <b>&lt;url&gt;</b> with '+link_details.href, 15000);
			}
						
			function createVariation(){
				add_variation(suggTxt);
				disableCreation();
				info('Suggestion appended to the list');
			}
			
			function disableCreation(){
				$(add_button).attr('disabled', 'disabled');
				$(add_button).button();
			}
			
			function enableCreation(){
				$(add_button).removeAttr('disabled');
				$(add_button).button();
			}
			
			var suggestionItem = document.createElement('div');
			suggestionItem.className = 'suggestionItem';
			suggestionCnt.appendChild(suggestionItem);
			
			var topCnt = document.createElement('div');
			topCnt.className = 'topCnt';
			suggestionItem.appendChild(topCnt);
			
			var bottomCnt = document.createElement('div');
			bottomCnt.className = 'bottomCnt';
			suggestionItem.appendChild(bottomCnt);
			
			//top
			var topOpts = document.createElement('div');
			topOpts.className = 'topOpts';
			bottomCnt.appendChild(topOpts);
			
			var topLeftCnt = document.createElement('div');
			topLeftCnt.className = 'topLeftCnt';
			bottomCnt.appendChild(topLeftCnt);
			
			// bottom
			var bottomOpts = document.createElement('div');
			bottomOpts.className = 'bottomOpts';
			topCnt.appendChild(bottomOpts);
			
			var bottomLeftCnt = document.createElement('div');
			bottomLeftCnt.className = 'bottomLeftCnt';
			topCnt.appendChild(bottomLeftCnt);
			
			var temp = document.createElement('div');
			temp.style.clear = 'right';
			topCnt.appendChild(temp);
			
			var tplLabel = document.createElement('strong');
			bottomLeftCnt.appendChild(tplLabel);
			tplLabel.innerHTML = 'Template: ';
			
			var tplText = document.createElement('span');
			bottomLeftCnt.appendChild(tplText);
			
			var prevBtn = document.createElement('a');
			prevBtn.innerHTML = '&laquo;';
			prevBtn.title = 'previous template';
			prevBtn.onclick = function(){
				_selfSuggestion.setTemplate(selectedTpl-1);
			};
			bottomOpts.appendChild(prevBtn);
			
			var tplPosPlh = document.createElement('span');
			bottomOpts.appendChild(tplPosPlh);
			
			var nextBtn = document.createElement('a');
			nextBtn.innerHTML = '&raquo;';
			nextBtn.title = 'next template';
			nextBtn.onclick = function(){
				_selfSuggestion.setTemplate(selectedTpl+1);
			};
			bottomOpts.appendChild(nextBtn);
			
			var editTplBtn = document.createElement('a');
			editTplBtn.title = 'edit template';
			editTplBtn.onclick = _selfSuggestion.editTpl;
			editTplBtn.innerHTML = 'edit Template';
			bottomOpts.appendChild(editTplBtn);
			
			
			var suggestionLabel = document.createElement('strong');
			topLeftCnt.appendChild(suggestionLabel);
			suggestionLabel.innerHTML = 'Suggestion: ';
			
			var suggestionText = document.createElement('span');
			topLeftCnt.appendChild(suggestionText);
			
			var suggestBtn = document.createElement('a');
			suggestBtn.title = 'create another suggestion';
			suggestBtn.onclick = function(){
				_selfSuggestion.showSuggestedTxt();
			};
			suggestBtn.innerHTML = 'suffle keywords';
			topOpts.appendChild(suggestBtn);
		
			var add_button = document.createElement('button');
			add_button.title = 'Accept suggesion';
			add_button.onclick = createVariation;
			add_button.innerHTML = 'Accept suggesion';
			ftBtmCnt.appendChild(add_button);
			$(add_button).button();

			init();
			this.setTemplate(0);
		}
		
		var container = document.createElement('div');
		
		// footer buttons
		var ftBtmCnt = document.createElement('div');
		container.appendChild(ftBtmCnt);
		ftBtmCnt.className = 'ftBtmCnt';
		
		//////////
		// Help //
		//////////
		
		var helpCnt = document.createElement('div');
		helpCnt.className = 'helpCnt';
		container.appendChild(helpCnt);
		var helpImg = document.createElement('span');
		helpImg.className = 'variationsHelpImg';
		helpCnt.appendChild(helpImg);
		helpCnt.innerHTML += 'This tool helps in the creation of tweet messages based on keywords extracted from webpages or entered manually. These will be applied over the template at the bottom and the resulted suggestion can be added to the list of smarTweets.<div style="clear:both"></div>';
		
		
		//////////
		// Tags //
		//////////
		var temp_tags_input_val = 'add custom keyword';
		var tagsSelCnt = document.createElement('div');
		tagsSelCnt.className = 'tagsSelCnt';
		container.appendChild(tagsSelCnt);
		
		var newTagsCnt = document.createElement('div');
		newTagsCnt.className = 'newTagsCnt';
		tagsSelCnt.appendChild(newTagsCnt);
		
		var allTagsSelCnt = document.createElement('div');
		allTagsSelCnt.className = 'allTagsSelCnt';
		tagsSelCnt.appendChild(allTagsSelCnt);
		var tmpLabel = document.createElement('h2');
		tmpLabel.innerHTML = 'Available Keywords';
		allTagsSelCnt.appendChild(tmpLabel);
		
		var setTagsSelCnt = document.createElement('div');
		setTagsSelCnt.className = 'setTagsSelCnt';
		tagsSelCnt.appendChild(setTagsSelCnt);
		var tmpLabel = document.createElement('h2');
		tmpLabel.innerHTML = 'Selected Keywords';
		setTagsSelCnt.appendChild(tmpLabel);

		var setTagsSel = document.createElement('ul');
		setTagsSelCnt.appendChild(setTagsSel);
		
		var newTagInput = document.createElement('input');
		newTagInput.type = 'text';
		setFieldTempValue(newTagInput, temp_tags_input_val, true);
		var addNewTag = function(){
			var tagVal = newTagInput.value;
			if(tagVal && tagVal!=temp_tags_input_val){
				var tag = new Tag(tagVal);
				tag.add();
				_self.add_tag(tagVal);
				
				newTagInput.value = '';
			}
		};
		
		onEnter(newTagInput, addNewTag);
		setTagsSelCnt.appendChild(newTagInput);
		
		var add_button_icon = document.createElement('img');
		add_button_icon.title = 'add keyword';
		add_button_icon.style.marginLeft = '10px';
		add_button_icon.src = SITE_URL+'/images/icon/16/edit_add.png';
		add_button_icon.onclick = addNewTag;
		setTagsSelCnt.appendChild(add_button_icon);

		
		var allTagsSel = document.createElement('ul');
		for(var i=0; i<tags_arr.length; i++){
			if(tags_arr[i].length>0){
				new Tag(tags_arr[i]);
			}
		}
		allTagsSelCnt.appendChild(allTagsSel);
		
		var variationTextsCnt = document.createElement('div');
		variationTextsCnt.className = 'variationTextsCnt';
		container.appendChild(variationTextsCnt);
		
		var suggestionCnt = document.createElement('div');
		suggestionCnt.className = 'tagsSelCnt';
		container.appendChild(suggestionCnt);
			
		// footer help
		var footerInfo = document.createElement('div');
		footerInfo.className = 'footerInfo';
		container.appendChild(footerInfo);
		
		var doneBtn = document.createElement('button');
		doneBtn.innerHTML = 'Close';
		ftBtmCnt.appendChild(doneBtn);
		$(doneBtn).button();
		
		fan_show_transparent_bg();
		var variationWin = new fan_window(
			document.body,
			'Create Variations',
			container,
			{onclose:fan_hide_transparent_bg,width:600, height:415}
		);
		variationWin.center_window();
		
		doneBtn.onclick = variationWin.close;
		
		var suggestion = new Suggestion();
	};
	
	_self.edit = function(){
		display_plh.style.display = 'none';
		edit_plh.style.display = 'block';
		title_div.style.color = '#AAA';
		
		jQuery(edit_label).addClass('disabled');
		jQuery(add_button).find('span').addClass('disabled');
		add_button.old_onclick = add_button.onclick;
		add_button.onclick = function(){};
		
		if(shareCnt){
			jQuery(shareCnt).find('span').addClass('disabled');
			tShare.old_onclick = tShare.onclick;
			tShare.onclick = function(){};
			fShare.old_onclick = fShare.onclick;
			fShare.onclick = function(){};
		}
	};
	
	_self.finish_edit = function(){
		if(!_self.check_values()){
			return;
		}
		
		jQuery(edit_label).removeClass('disabled');
		jQuery(add_button).find('span').removeClass('disabled');
		add_button.onclick = add_button.old_onclick;
		
		if(shareCnt){
			jQuery(shareCnt).find('span').removeClass('disabled');
			tShare.onclick = tShare.old_onclick;
			fShare.onclick = fShare.old_onclick;
		}
		
		display_plh.style.display = 'block';
		edit_plh.style.display = 'none';
		edit_label.innerHTML = 'Modify';
		edit_button.onclick = _self.edit;
		title_div.style.color = '#000';
		
		title_div.innerHTML = WVfan.nl2br(title_input.value);
		href_div.innerHTML = href_input.value;
		href_div.href = href_input.value;
		refresh_tags();
	};
	
	function refresh_tags(){
		tags_plh.innerHTML = _self.get_tags()?_self.get_tags():'none';
	}
		
	_self.get_add_button = function(){
		return add_button;
	};
	
	_self.get_tags = function(){
		return (tags_input.value && tags_input.value!=temp_tags_input_val)?tags_input.value:'';
	};
	
	_self.add_tag = function(tag){
		var tags = _self.get_tags();
		tags += (tags?', ':'') + tag;
		tags_input.value = tags;
		refresh_tags();
	};
	
	_self.get_url = function(){
		return (href_input.value && href_input.value!=default_url_input_value)?href_input.value:'';
	};
	
	_self.get_thumb_url = function(){
		return thumb_url;
	};
	
	_self.get_original_url = function(){
		return original_url;
	};
	
	_self.get_tweet_text = function(){
		var url = _self.get_url();
		var tweet = title_input.value;
		
		if(url){
			tweet += ' '+url;
		}
		
		return tweet;
	};
	
	_self.remove = function(){
		$(link_item_container).hide('transfer', {to: "#st_wizard_count", className: 'ui-effects-transfer'} ,500);
		$(link_item_container).hide('blind', 100);
	};
	
	_self.shorten_url = function(){
		if(!is_url(href_input.value)){
			alert('This is not a valid URL');
			return;
		}
		shorten_url(href_input.value, _self.shorten_url_callback);
	};
	
	_self.shorten_url_callback = function(data){
		if(typeof(data)=='object'){
			data = 'http://avoo.net/' + data.url;
		}
		if(is_url(data)){
			href_input.value = data;
			href_div.href = data;
			href_div.innerHTML = data;
			
			$(href_div).addClass('shortened_url');
			$(href_input).addClass('shortened_url');
			
			shorten_url_button.style.display = 'none';
			href_input.setAttribute('readonly', 'readonly');
			_self.calculate_length();
		}
	};
	
	_self.calculate_length = function(){
		var temp = _self.get_tweet_text();
		var temp_length = 140-temp.length;
		
		if(temp_length<0){
			temp_length = -temp_length;
			item_length.style.color = '#E00';
			counter_label.innerHTML = 'over';
		}
		else{
			item_length.style.color = '';
			counter_label.innerHTML = 'left';
		}
		item_length.innerHTML = temp_length;
	};
	
	_self.add2queue = function(){
		if(!_self.check_values()){
			return;
		}
		
		_self.add2temp_queue(function(data){
			if(typeof(data)=='object' && typeof(data.successfull)=='boolean' && data.successfull){
				_self.remove();
			}
		});
	};
	
	_self.check_values = function(){
		if(!title_input.value){
			alert('Please enter the message body');
			return false;
		}
		
		var hrefVal = href_input.value;
		if(hrefVal && hrefVal!=default_url_input_value){
			if(is_url(hrefVal, true)){
				hrefVal = href_input.value = 'http://'+hrefVal;
				_self.refresh_url();
			}
			
			if(!is_url(hrefVal)){
				alert('Please enter a valid URL');
				return false;
			}
		}
		
		return true;
	};
	
	_self.update_original_url = function(url){
		if(url==default_url_input_value){
			url = '';
		}
	
		original_url = url;
		url_button.href = url;
		url_button.title = url;
		
		if(is_url(url)){
			jQuery(href_div).show();
			jQuery(url_button).show();
			jQuery(shorten_url_button).show();
		}
		else{
			jQuery(href_div).hide();
			jQuery(url_button).hide();
			jQuery(shorten_url_button).hide();
		}
	};
	
	_self.refresh_url = function(){
		_self.calculate_length();
		
		_self.update_original_url(_self.get_url());
	};
	
	
	_self.add2temp_queue = function(caller_callback){
		var status = _self.get_tweet_text;
		var tags = _self.get_tags();
		
		if(temp_queue.length==free_limit){
			free_limit_alert();
		}
		
		var call_params = {
			what:'account',
			op:'add2temp_queue',
			status:status,
			tags:tags,
			thumb:thumb_url,
			title:title,
			keywords:keywords,
			description:description,
			original_url:original_url
		};
		
		var callback = function(data){
			if(typeof(caller_callback)=='function'){
				caller_callback(data);
			}
			add2temp_queue_callback(data);
		};
		
		make_service_call(call_params, callback);
	};

	function add2temp_queue_callback(data){
		if(typeof(data)=='object' && typeof(data.successfull)=='boolean' && data.successfull){
			temp_queue.push(data.added_status);
			add2temp_queue_display(data.added_status, data.added_index);

					// adds
					$('#active_count_st').html(temp_queue.length);
					if (temp_queue.length > 0){
						$('#active_wizard_st').show();
					}
					// end adds
			$('#temp_queue_count').html(temp_queue.length);
		}
		else if(typeof(data)=='object' && typeof(data.successfull)=='boolean' && !data.successfull){
			if(typeof(data.error)=='string' && data.error){
				alert(data.error);
			}
			else{
				alert('An error occured while adding the smarTweet');
			}
		}
	}
	
	_self.get_link_item_container = function(){
		return link_item_container;
	}
	
	var link_item_container = document.createElement('div');
	link_item_container.className = 'link_item_container'+(is_variation?' variation':'');
	
	var top_container = document.createElement('div');
	top_container.className = 'link_item_top_container';
	link_item_container.appendChild(top_container);
	
	var edit_plh = document.createElement('div');
	edit_plh.className = 'item_edit_plh';
	edit_plh.style.display = 'none';
	top_container.appendChild(edit_plh);

	var display_plh = document.createElement('div');
	display_plh.className = 'item_display_plh';
	top_container.appendChild(display_plh);



	
	//display
	var title_div = document.createElement('div');
	title_div.innerHTML = link_details.title;
	title_div.className = 'link_iten_title';
	display_plh.appendChild(title_div);
	
	var href_div = document.createElement('a');
	href_div.innerHTML = link_details.href;
	href_div.href = link_details.href;
	href_div.target = '_blank';
	href_div.title = 'open';
	href_div.className = 'link_iten_href';
	display_plh.appendChild(href_div);
	
	var tags_div = document.createElement('div');
	tags_div.innerHTML = 'Tags: ';
	tags_div.className = 'small fade hidden';
	var tags_plh = document.createElement('span');
	tags_plh.innerHTML = link_details.tags?link_details.tags:'none';
	tags_div.appendChild(tags_plh);
	display_plh.appendChild(tags_div);
	
	// icon
	var icon = document.createElement('img');
	icon.className = 'item_icon';
	if(typeof(link_details.favicon)=='string' && link_details.favicon){
		icon.src = link_details.favicon;
		thumb_url = link_details.favicon;
	}
	else if(typeof(link_details.logo)=='string' && link_details.logo){
		icon.src = link_details.logo;
		thumb_url = link_details.logo;
	}
	else{
		icon.src = SITE_URL+'/images/icon/32/internet_disabled.png';
	}
	top_container.appendChild(icon);
	
	
	//edit
	var title_input_id = 'LTI_'+(new Date()).getTime();
	var title_input = document.createElement('textarea');
	title_input.id = title_input_id;
	title_input.className = 'link_title_input';
	title_input.value = link_details.title;
	title_input.onchange = _self.calculate_length;
	title_input.onkeyup = title_input.onchange;
	title_input.onblur = title_input.onchange;
	edit_plh.appendChild(title_input);
	WVfan.AutoExpandTextarea(title_input);
	
	var href_input = document.createElement('input');
	href_input.className = 'link_href_input';
	href_input.type = 'text';
	href_input.value = link_details.href;
	href_input.onchange = _self.refresh_url;
	//href_input.onkeyup = _self.refresh_url;
	//href_input.onblur = _self.refresh_url;
	setFieldTempValue(href_input, default_url_input_value, link_details.href?false:true);
	edit_plh.appendChild(href_input);
	
	var tags_cnt = document.createElement('div');
	tags_cnt.className = 'hidden';
	var tags_input = document.createElement('input');
	tags_input.className = 'link_href_input';
	tags_input.type = 'text';
	tags_input.value = link_details.tags;
	setFieldTempValue(tags_input, temp_tags_input_val, link_details.tags?false:true);
	edit_plh.appendChild(tags_cnt);
	tags_cnt.appendChild(tags_input);
	
	// meta
	if(title || description || keywords){
		var metaCnt = document.createElement('div');
		metaCnt.className = 'metaInfoCnt';
		edit_plh.appendChild(metaCnt);
		
		var metaH = document.createElement('h3');
		metaH.innerHTML = 'Meta information';
		metaCnt.appendChild(metaH);
		
		if(title){
			var metaTitle = document.createElement('div');
			metaTitle.innerHTML = '<b>Title</b>: '+title;
			metaCnt.appendChild(metaTitle);
		}
		if(description){
			var metaTitle = document.createElement('div');
			metaTitle.innerHTML = '<b>Description</b>: '+description;
			metaCnt.appendChild(metaTitle);
		}
		if(keywords){
			var metaTitle = document.createElement('div');
			metaTitle.innerHTML = '<b>Keywords</b>: '+keywords;
			metaCnt.appendChild(metaTitle);
		}
	}
	
	var submit_button = document.createElement('button');
	submit_button.className = 'submit_button';
	submit_button.innerHTML = 'Done';
	submit_button.onclick = _self.finish_edit;
	edit_plh.appendChild(submit_button);
	
	
	// buttons
	var button_container = document.createElement('div');
	button_container.className = 'link_item_button_container';
	link_item_container.appendChild(button_container);
	
	// add tutton
	var add_button = document.createElement('a');
	add_button.title = 'add to queue';
	add_button.title_input = title_input;
	add_button.href_input = href_input;
	add_button.container = link_item_container;
	add_button.onclick = _self.add2queue;
	var add_button_icon = document.createElement('img');
	add_button_icon.src = SITE_URL+'/images/icon/16/edit_add.png';
	add_button.appendChild(add_button_icon);
	add_button.innerHTML += '<span>Add</span>';
	button_container.appendChild(add_button);
	
	// edit tutton
	var edit_button = document.createElement('a');
	edit_button.title = 'Modify';
	edit_button.onclick = _self.edit;
	var edit_button_icon = document.createElement('img');
	edit_button_icon.src = SITE_URL+'/images/icon/16/edit_.png';
	edit_button.appendChild(edit_button_icon);
	var edit_label = document.createElement('span');
	edit_label.innerHTML = 'Modify';
	edit_button.appendChild(edit_label);
	button_container.appendChild(edit_button);
	
	// shorten URL tutton
	var shorten_url_button = document.createElement('a');
	shorten_url_button.title = 'shorten URL with Avoo.net';
	shorten_url_button.onclick = _self.shorten_url;
	var shorten_url_button_icon = document.createElement('img');
	shorten_url_button_icon.src = SITE_URL+'/images/icon/16/avoo_net.png';
	shorten_url_button.appendChild(shorten_url_button_icon);
	shorten_url_button.innerHTML += '<span>Shorten URL</span>';
	button_container.appendChild(shorten_url_button);
	
	// variations button
	if(Status.variationsEnabled && !is_variation){
		var variations_button = document.createElement('a');
		variations_button.title = 'Create variations from this post';
		variations_button.onclick = create_variation;
		var variations_button_icon = document.createElement('img');
		variations_button_icon.src = SITE_URL+'/images/icon/16/enumList.png';
		variations_button.appendChild(variations_button_icon);
		variations_button.innerHTML += '<span>Create variations</span>';
		button_container.appendChild(variations_button);
	}
	
	// Original URL
	var url_button = document.createElement('a');
	url_button.href = link_details.href;
	url_button.target = '_blank';
	url_button.title = link_details.href;
	var url_icon = document.createElement('img');
	url_icon.src = SITE_URL+'/images/icon/16/network.png';
	url_icon.alt = link_details.href;
	url_button.appendChild(url_icon);
	url_button.innerHTML += '<span>Open URL</span>';
	button_container.appendChild(url_button);
	
	if(Status.shareEnabled){
		var shareCnt = document.createElement('a');
		shareCnt.innerHTML = '<span>Share</span> ';
		button_container.appendChild(shareCnt);
		
		var tShare = document.createElement('img');
		tShare.src = SITE_URL+'/images/icon/16/twitter.png';
		tShare.onclick = function(){
			fan_share_post_on_twitter(_self.get_tweet_text());
		}
		shareCnt.appendChild(tShare);
		
		var fShare = document.createElement('img');
		fShare.src = SITE_URL+'/images/icon/16/facebook.png';
		fShare.onclick = function(){
			fan_share_post_on_fb(_self.get_tweet_text());
		}
		shareCnt.appendChild(fShare);
	}
	
	// counter
	var counter_container = document.createElement('span');
	counter_container.className = 'item_counter_container';
	button_container.appendChild(counter_container);
	
	var item_length = document.createElement('div');
	item_length.className = 'item_length';
	item_length.title = 'left characters to use';
	counter_container.appendChild(item_length);
	
	var counter_label = document.createElement('div');
	counter_label.className = 'item_counter_label';
	counter_label.innerHTML = 'left';
	counter_container.appendChild(counter_label);
	
	links_container.appendChild(link_item_container);

	_self.refresh_url();
	_self.calculate_length();
	Status.applyTranslit(title_input_id);
};

Counter = function(container, input, maxLen){
	function refresh(){
		var temp = $(input).val();
		var temp_length = maxLen-temp.length;
		
		if(temp_length<0){
			temp_length = -temp_length;
			item_length.style.color = '#E00';
			counter_label.innerHTML = 'over';
		}
		else{
			item_length.style.color = '';
			counter_label.innerHTML = 'left';
		}
		item_length.innerHTML = temp_length;
	}
	
	var counter_container = document.createElement('span');
	counter_container.className = 'item_counter_container';
	container.appendChild(counter_container);
	
	var item_length = document.createElement('div');
	item_length.className = 'item_length';
	item_length.title = 'left characters to use';
	counter_container.appendChild(item_length);
	
	var counter_label = document.createElement('div');
	counter_label.className = 'item_counter_label';
	counter_label.innerHTML = 'left';
	counter_container.appendChild(counter_label);
	
	input.onchange = refresh;
	input.onkeyup = refresh;
	
	refresh();
}

Status.editTemp = function(key){
	var editCnt = document.getElementById('editItem'+key);
	var txtEl = document.getElementById('message'+key);
	var saveBtn = document.getElementById('save'+key);
	var msgDisplay = document.getElementById('msgDisplay'+key);
	
	function update(){
		var params = {
			what:'status',
			op:'update_temp',
			index:key,
			status:$(txtEl).val()
		};
		make_service_call(params, updateCallback);
	}
	
	function updateCallback(data){
		if(data.successfull){
			$(editCnt).hide();
			$('#viewItem'+key).show();
			msgDisplay.innerHTML = $(txtEl).val();
		}
	}

	$('#viewItem'+key).hide();
	$(editCnt).show();
	$(saveBtn).button();
	
	saveBtn.onclick = update;
	
	new Counter(editCnt, txtEl, 140);
}

Status.translitLoaded = false;
Status.translitCtrl = false;
Status.translitLang = 'en';
Status.translitElemIds = [];

Status.translitLangs = {
	// en:'English',
	am:'Amharic',
	ar:'Arabic',
	bn:'Bengali',
	zh:'Chinese',
	el:'Greek',
	gu:'Gujarati',
	hi:'Hindi',
	kn:'Kannada',
	ml:'Malayalam',
	mr:'Marathi',
	ne:'Nepali',
	or:'Oriya',
	fa:'Persian',
	pa:'Punjabi',
	ru:'Russian',
	sa:'Sanskrit',
	si:'Sinhalese',
	sr:'Serbian',
	ta:'Tamil',
	te:'Telugu',
	ti:'Tigrinya',
	ur:'Urdu'
};

Status.setTranslitLang = function(langAbbr){
	Status.translitLang = langAbbr;
	Status.applyTranslit();
}

Status.translitLoadedCbk = function(){
	Status.translitLoaded = true;
}

Status.initTranslit = function(){
	if(typeof(Status.translitCtrl)!='object'){
		var available_langs = Array();
		for ( var i in Status.translitLangs){
			available_langs.push(i);
		}
		
		var options = {
			sourceLanguage:'en',
			destinationLanguage:available_langs,
			shortcutKey: 'ctrl+g',
			transliterationEnabled: true
		};

		Status.translitCtrl = new google.elements.transliteration.TransliterationControl(options);
	}
}

Status.applyTranslit = function(translitElemIds){
	if(!Status.translitLoaded){
		setTimeout(function(){Status.applyTranslit(translitElemIds)}, 100);
		return;
	}

	if(typeof(translitElemIds)=='string'){
		translitElemIds = [translitElemIds];
	}
	if(typeof(translitElemIds)!='object'){
		translitElemIds = Status.translitElemIds;
	}
	else{
		for(var i=0; i<translitElemIds.length; i++){
			Status.translitElemIds.push(translitElemIds[i]);
		}
	}
	
	Status.initTranslit();
	Status.translitCtrl.makeTransliteratable(translitElemIds);
	
	if(Status.translitLang=='en'){
		Status.translitCtrl.disableTransliteration();
		return;
	}
	Status.translitCtrl.setLanguagePair('en', Status.translitLang);
	Status.translitCtrl.enableTransliteration();
}
