//global vars
// This various is used to prevent initializing init method twice on iE.
var isInit = false;
var ourUrl='';
var lastRating = null;
var isIE6=(navigator.userAgent.indexOf("IE 7")==-1 && navigator.userAgent.indexOf("IE 6")>-1)?true:false;
var isIE=(navigator.userAgent.indexOf("IE")>-1)?true:false;
var tb_pathToImage = /*webPath+*/"/js/thickbox/preloader.gif";
var sn_inited=false;
var paths=[webPattern+"/images/toolbar_get.png",webPattern+"/images/toolbar_home.png",webPattern+"/images/toolbar_hopsurf.png",webPattern+"/images/ico_autosurf.png",webPattern+"/images/tre_opened_sm.png",webPattern+"/images/forms_btn_search.png",webPattern+"/images/star.png"];
var pathsOver=[webPattern+"/images/toolbar_get_over.png",webPattern+"/images/toolbar_home_over.png",webPattern+"/images/toolbar_hopsurf_over.png",webPattern+"/images/ico_autosurf_over.png",webPattern+"/images/tre_opened_sm.png",webPattern+"/images/forms_btn_search_over.png",/* background images */webPattern+"/images/star_over.png",webPattern+"/images/ico_comments_hover.gif"];
var imgs=new Array();
/*if (isIE6){	//IE6 will have no rollovers
	for (var i=0; i<paths.length; i++){
		paths[i]=paths[i].replace(".png",".gif");
		paths[i]=paths[i].replace("images/","images/ie6/");
	}
	for (var i=0; i<pathsOver.length; i++){
		pathsOver[i]=pathsOver[i].replace(".png",".gif");
		pathsOver[i]=pathsOver[i].replace("images/","images/ie6/");
	}
}*/
function refreshStatus(xml1){
	if(isEmbed()){
		xml1 = '<xml>' + xml1 + "</xml>";
	}
	var countLikes = jQuery('likes', xml1).text();
	var countDislikes = jQuery('dislikes', xml1).text();
	var countReviews = jQuery('reviews', xml1).text();
	var bookmarked = jQuery('bookmarked', xml1).text() == "true";
	showLikes(countLikes);
	showDislikes(countDislikes);
	var status = jQuery('status', xml1).text();
	if(status){
		if(parseInt(status) == 1){
		}else if(parseInt(status) == -1){
		}
	}
	if(countReviews){
		jQuery('#reviews_link').html(countReviews + ' reviews');
	}
	switch(parseInt(status)){
		case 1: {
			disableButton('like'); break;
			}
		case -1: {
			disableButton('dislike'); break;
			}
		default: {
			if (!jQuery('#hopsurf_js_toolbar .vote').hasClass('disabled'))
				jQuery('#hopsurf_js_toolbar .vote').bind("click",rateLiked);
			if (!jQuery('#hopsurf_js_toolbar .votebad').hasClass('disabled'))
				jQuery('#hopsurf_js_toolbar .votebad').bind("click",rateDisliked);
			break;
		}
	}

	if (xml1==null || !xml1){
		showLikes(cLikes);
		showDislikes(cDislikes);
	}
}
/**
 * @param ourUrl
 * @return
 */
function updateRatingInfo(ourUrl) {
	if ((ourUrl != null) && (ourUrl != "")){
		// initialize like,dislike and review numbers
		encodedURL = encodeURIComponent(ourUrl);
		if(isEmbed()){
			var url = webPath + "/ratingInfo?embed=1&url=" + encodedURL + "&callback=?";
			jQuery.getJSON(url, function(json){
				refreshStatus(json.result);
			});
		}else{
			jQuery.ajax({
				url: webPath + "/ratingInfo",
				type: "GET",
				beforeSend: function(xhr){
					xhr.setRequestHeader('Location', encodedURL);
				},
				error: function(){
				//alert("ajax error");
				},
				success: refreshStatus	
			});
		}
	}
}
function init(){
	if(isInit){
		return;
	}
	ourUrl = sn_targer;
	updateRatingInfo(ourUrl);
//	if ((ourUrl != null) && (ourUrl != "")){
//		// initialize like,dislike and review numbers
//		encodedURL = encodeURIComponent(ourUrl);
//		$.ajax({
//			url: webPath + "/ratingInfo",
//			type: "GET",
//			beforeSend: function(xhr){
//				xhr.setRequestHeader('Location', encodedURL);
//			},
//			error: function(){
//			//alert("ajax error");
//			},
//			success: refreshStatus	
//		});
//	}
//markup tuning
	var deltaH=isIE?37:34;
	jQuery('#hopsurf_frame').height(jQuery('#hopsurf_frame').height()-deltaH);
	jQuery("input[type='text'],input.file").addClass('bg');
	jQuery("input[type='text'], textarea,input.file").addClass('border'); 
	if(!isEmbed()){
		if (jQuery("select").length > 0) jQuery("select").selectbox();
	}
	if (jQuery('.bookmark').hasClass('disabled')) {
  		jQuery('.bookmark').unbind(); 
		if(isIE6) jQuery('.bookmark').css('backgroundImage','url('+webPattern+'/images/ie6/star_dis.gif)');
		else jQuery('.bookmark').css('backgroundImage','url('+webPattern+'/images/star_dis.png)');
	}
	if (jQuery('.vote').hasClass('disabled')) {
		disableButton('like');
		if(isIE6) jQuery('.vote').css('backgroundImage','url('+webPattern+'/images/ie6/ico_thumbs_up_dis.gif)');
		else jQuery('.vote').css('backgroundImage','url('+webPattern+'/images/ico_thumbs_up_dis.png)');
		
	}
	if (jQuery('.votebad').hasClass('disabled')) {
		disableButton('dislike'); 
		if(isIE6) jQuery('.votebad').css('backgroundImage','url('+webPattern+'/images/ie6/ico_thumbs_down_dis.gif)');
		else jQuery('.votebad').css('backgroundImage','url('+webPattern+'/images/ico_thumbs_down_dis.png)');
	}
	
//observers
	/*var iframe=window.frames[0];
	iframe.onload=function(){
		var h=iframe.contentWindow.document.height;	
		console.log(h);
	}*/
	jQuery(window).bind("resize", function(){	// tunes iframe height on window resize to avoid vertical scroll
		setTimeout(function(){
			jQuery('#hopsurf_frame').height('100%');
			jQuery('#hopsurf_frame').height(jQuery('#hopsurf_frame').height()-deltaH);
			},500);
	});
	
	jQuery('#search_btn').bind("click",searchHopsurf);
	jQuery('#search_query').bind("keypress",function(evt){
		var keyCode = evt.keyCode ? evt.keyCode : evt.charCode ? evt.charCode :	evt.which ? evt.which : void 0;
		if (keyCode==13){
			searchHopsurf();
		}
	});
	jQuery('#hopsurf_js_toolbar .btn_close').bind("click",function(){
		location.href=ourUrl;
	});
	if(typeof isToolbarVisible!='undefined'){
		if (!isToolbarVisible){
			  jQuery('#sn_button').click(function(){
				  jQuery('.stickynote_toolbar').css('left',jQuery('#sn_button').get(0).offsetLeft+'px');
				  jQuery('.stickynote_toolbar .jquery-selectbox-list, .stickynote_toolbar .jquery-selectbox').css('width','130px');
				  jQuery('.stickynote_toolbar').toggle();
				//  if (!sn_inited){
				//	  loadProxyFrame();
				//  }
				  jQuery(this).blur();
		 		 var vis=(jQuery('.stickynote_toolbar').css('display')=='none')?false:true;
		 		 if (vis){
		   			if (jQuery('#sn_select').val()=='3')
		   				 show_username();
		  			}else{	//toolbar is just hidden
						if (jQuery('#archive_field').css('display')!='none'){
							jQuery('#archive_field').hide();
						}
		  		 }
		  		return false;
	 		});
		}	
	}
	
// tooltips	
	if(!isEmbed()){
		jQuery('#hopsurf_js_toolbar .with_tooltip').ToolTip({
			className: 'tooltip',
			position: 'bottom',
			delay: 500
		});
		jQuery('#hopsurf_js_toolbar .btn_close').ToolTip({
			className: 'tooltip',
			position: 'left',
			delay: 500
		});
	}

//preload image rollovers
	if (!isIE6){
		rolloversInit();
		jQuery('.over').each(function(i){
			jQuery(this).bind("mouseover",function(){
				rolloverImage(jQuery(this),i);	
			});
			jQuery(this).bind("mouseout",function(){
				rolloutImage(jQuery(this),i);
			});	
		});
	}
	
//thickbox window height in different browsers
	var thickbox_str="";
	if (isIE){
		if (isIE6)
		thickbox_str=webPath+"/login.jsp?backTo="+top.location.href+"&placeValuesBeforeTB_=savedValues&TB_iframe=true&height=425&width=440";
		else
		thickbox_str=webPath+"/login.jsp?backTo="+top.location.href+"&placeValuesBeforeTB_=savedValues&TB_iframe=true&height=395&width=420";
	}
	else{
		thickbox_str=webPath+"/login.jsp?backTo="+top.location.href+"&placeValuesBeforeTB_=savedValues&TB_iframe=true&height=385&width=420";
	}
	jQuery("#service_login").attr("href",thickbox_str);
	isInit = true;
	if (!window.frames["hopsurf_frame"]){
		hopsurfFrameOnload();
	}
	
};
jQuery(document).ready(init);	

function loadProxyFrame(){
	  jQuery('#hopsurf_frame').attr('src',webPath+'/proxy?purl='+ourUrl);
	   jQuery('#hopsurf_frame').load(loadframeSN);
	   //hopsurfFrameOnload();
	   sn_inited=true;
}
var loadframeSN = function(){

	jQuery("#hopsurf_js_toolbar").css('display','none');
	jQuery("#hopsurf_frame").css('top','0px');
	var stickynotewebapp=webPath;
	var d = window.frames["hopsurf_frame"].document;
	var s1,s2,s3,s4,s5,s6,s7,a=function(o){d.documentElement.appendChild(o)};
	s5=d.createElement('script');
	s5.text="var stickynotewebapp='"+webPath+"',tb_pathToImage='"+webPath+"/js/thickbox/preloader.gif';";
	a(s5);
	
	s1=d.createElement('script');
	s1.type='text/javascript';
	s1.src=stickynotewebapp+'/js/jquery.js';
	a(s1);
	s7=d.createElement('script');
	s7.text="jQuery.noConflict();";
	a(s7);
	s4=d.createElement('script');
	s4.type='text/javascript';
	s4.src=stickynotewebapp+'/js/thickbox/stickynote-thickbox.js';
	a(s4);
	s6=d.createElement('script');
	s6.text="try{tb_init('a.thickbox');}catch(err){};";
	a(s6);
	s3=d.createElement('script');
	s3.type='text/javascript';
	s3.src=stickynotewebapp+'/js/highlighter.js';
	a(s3);
	s2=d.createElement('script');
	s2.type='text/javascript';
	s2.src=stickynotewebapp+'/js/stickynote.js';
	a(s2);
	//alert(hopsurf_frame.window.StickyNote.isProxy);
	
	//window.frames["hopsurf_frame"].StickyNote.setProxy(true).setWebPath(webPath).start();
	
	//alert("111111111");
}
//functions
function rateLiked(){
	jQuery(this).blur();
	rateURL(1);
}
function rateDisliked(){
	jQuery(this).blur();
	rateURL(-1);
}
function showLikes(countLikes) {
	jQuery('a.vote').html(countLikes + ' likes');
}
function showDislikes(countDislikes) {
	jQuery('a.votebad').html(countDislikes + ' dislikes');
}
function disableButton(type){
	if (type=='like'){
		if (!jQuery('.vote').hasClass('disabled')){
			jQuery('.vote').unbind();
			jQuery('.vote').css('backgroundImage',"url("+webPattern+"/images/ico_thumbs_up_hover.png)");
			jQuery('.vote').css('cursor','default');
			jQuery('.vote').attr('title','You like it');
			if(!isEmbed()){
				jQuery('hopsurf_js_toolbar .vote').ToolTip({className: 'tooltip',position: 'bottom',delay: 500});
			}
		}
		if (!jQuery('.votebad').hasClass('disabled')){
			jQuery('.votebad').bind("click", rateDisliked);
			jQuery('.votebad').css('backgroundImage',"url("+webPattern+"/images/ico_thumbs_down.png)");
			jQuery('.votebad').css('cursor','pointer');
			jQuery('.votebad').attr('title','Add this site to Disiked sites');
		}	
	}
	else if (type=='dislike'){
		if (!jQuery('.votebad').hasClass('disabled')){
			jQuery('.votebad').unbind();
			jQuery('.votebad').css('backgroundImage',"url("+webPattern+"/images/ico_thumbs_down_hover.png)");
			jQuery('.votebad').css('cursor','default');
			jQuery('.votebad').attr('title',"You don't like it");
			if(!isEmbed()){
				jQuery('#hopsurf_js_toolbar .votebad').ToolTip({className: 'tooltip',position: 'bottom',delay: 500});
			}
		}
		if (!jQuery('.vote').hasClass('disabled')){	
			jQuery('.vote').bind("click", rateLiked);
			jQuery('.vote').css('backgroundImage',"url("+webPattern+"/images/ico_thumbs_up.png)");
			jQuery('.vote').css('cursor','pointer');
			jQuery('.vote').attr('title','Add this site to Liked sites');
		}	
	}
}

function searchHopsurf(){

//	var query=jQuery("#search_query").val().replace(/\s+/g,"+");
//	if (!query) { // forbid to search empty query
//		return;
//	}
	var query=$.trim($("#search_query").val());
	if (query == '') { // forbid to search empty query
		return;
	}

	var where=jQuery("#search_area").val();
	var searchStr;
	if (where=="tags"){
		searchStr=webPath + "/search/tags?search="+query;
	} else if  (where=="liked"){
		searchStr=webPath + "/search/likes?search="+query;
	} else if  (where=="disliked"){
		searchStr=webPath + "/search/dislikes?search="+query;
	} else if  (where=="keywords"){
		searchStr=webPath + "/search/keyword?search="+query;
	}
	location.href=searchStr;	//location.href="<web.path:path/>/toolbar?url="+searchStr;
}
function rolloversInit(){
	for (var i=0; i<pathsOver.length; i++){
		imgs[i]=new Image();
		imgs[i].src=pathsOver[i];
	}
}
function rolloverImage(img,i){
	img.attr('src',imgs[i].src);
}
function rolloutImage(img,i){
	img.attr('src',paths[i]);
}
/* show message */
var startDt, timer;
var msgIsHidden=true;

function showMessage(text){	// message init
	msgIsHidden=false;
	var msg=jQuery("<div style='margin-top:40px;'></div>");
	msg.addClass("message");
	msg.html(text);
	msg.hide();
	jQuery(top.document.body).append(msg);
	
	msg.fadeIn("normal");
	centerMessage(msg);
	startDt=new Date();
	timer=setInterval("checkMessage()",500);
}
function checkMessage(){	//hiding message after 3 seconds 
	var nowDt=new Date();
	var diffTime=1000*2.5;	//2.5 sec
	if (nowDt.getTime()-startDt.getTime()>=diffTime){
		jQuery(top.document.body).find(".message").each(function(){
			var curMsg=jQuery(this);
			if (curMsg.css("display")!="none"){
				curMsg.fadeOut("fast"); 
				setTimeout(function(){curMsg.remove();},600);
				msgIsHidden=true;
			}
		});
		clearInterval(timer);
	}
}
function centerMessage(msg){	//center the message in the window
	var y=0;
	var x=0.5*(jQuery(top.document.body).width()-msg.width());
	msg.css("left",x).css("top",y);
}

// Thickbox position override for IE and Opera
if (isIE || jQuery.browser.opera || jQuery.browser.safari){
	function tb_position() {
		var w0,h0;
		if (jQuery.browser.opera || jQuery.browser.safari) {w0=window.innerWidth; h0=window.innerHeight;}
		if (isIE){w0=document.documentElement.clientWidth; h0=document.documentElement.clientHeight;}
		var y=0.5*(h0-TB_HEIGHT);
		var x=0.5*(w0-TB_WIDTH);
		if (!isIE6)
			jQuery("#TB_window").css({left: x+"px", top: y+"px"});
		else
			jQuery("#TB_window").css({left: x+"px"});
	}
}

function rateURL(value){
	lastRating = parseInt(value);
//	if (!isURLAlredyKnown()) {
//		jQuery("#dislikedValue").val(value);
//		jQuery("#bookmark_link").trigger("click");
//		return;
//	}
	switch(parseInt(value)){
	case 1: 
		if (parseInt(jQuery('a.vote').html()) != 0) {
			showLikes(parseInt(jQuery('a.vote').html()) + 1);
			disableButton('like');
		}
		break;
	case -1:
		if (parseInt(jQuery('a.votebad').html()) != 0) {
			showDislikes(parseInt(jQuery('a.votebad').html()) + 1);
			disableButton('dislike');
		}
		break;
	}
	if(typeof embed != 'undefined' && embed == 1){
		var url = webPath + "/ratingURL?embed=1&rating=" + value + "&url=" + encodeURIComponent(ourUrl) + "&callback=?";
		jQuery.getJSON(url, function(json){
			refreshStatus(json.result);
		});		
	}else{
		jQuery.ajax({
			url: webPath + "/rating/" + value,
			type: "POST",
			beforeSend: function(xhr){
				xhr.setRequestHeader('Location', ourUrl);
			},
			error: function(xhr){
				if (xhr.status == 409) {
					if (lastRating == 1) {
						jQuery("#bookmark_link").trigger("click");
					} else {
						jQuery("#bookmark_dislike_link").trigger("click");
					}
				} else {
					refreshStatus();
				}
			},
			success: function(xml1){
				refreshStatus(xml1);
				try {
					jQuery("#JS_HopsurfToolbarNotifier").trigger('click');
				} catch (err) {
					
				}
				
			}
		});	
	}
}
/**
 * Identify whether JS toolbar is embedded into current document
 */
 function isEmbed(){
		return typeof embed != 'undefined' && (embed == 1 || embed == 2);
	}
function isURLAlredyKnown() {
	
	return parseInt(jQuery('a.vote').html()) + parseInt(jQuery('a.votebad').html()) != 0;
}

function hopsurfFrameOnload(){
		//	var proxyFrame = window.frames["hopsurf_frame"];
			//var proxyFrame = jQuery('#hopsurf_frame')[0].contentWindow;
		//	StickyNote.setWin(proxyFrame.window).setDocument(proxyFrame.document).setProxy(true).setWebPath(webPath).start();
			//StickyNote.setWin(proxyFrame).setDocument(proxyFrame.document).setProxy(true).setWebPath(webPath).start();
		function buildComments(father, stickynoteEntry){
			var field = jQuery('#archive_field_comment');
			var ul = jQuery('ul', field);
			var li = jQuery('li', ul);
			var ulClone = ul.clone();
			ulClone.empty();
			jQuery.each(stickynoteEntry.comments, function(){
				var liClone = li.clone();
				ulClone.append(liClone.html('<span style="font-weight:bolder;">' + this.user + ':</span>' + StickyNote.toTextAreaFormat(this.noteContent)));
			});
			father.append(ulClone);
			return ulClone;
		}
		
		jQuery(window).scroll(function(){
			setTimeout(function(){
				var div = jQuery('#archive_field');
				div.css('top', jQuery('.stickynote_toolbar').offset().top+32 + 'px' ).css('left', jQuery('.stickynote_toolbar').offset().left + 'px' );
			}, 0);
		});
		jQuery('#viewArchive').bind('click',function(event){
			jQuery(this).blur();
			var div = jQuery('#archive_field');
			//div.css('top', event.clientY + 'px' ).css('left', event.clientX + 'px' );
			//div.css('top', '37px' ).css('left', '5px' );
			div.css('top', jQuery('.stickynote_toolbar').offset().top+32 + 'px' ).css('left', jQuery('.stickynote_toolbar').offset().left + 'px' );
			if(hasBuiltArchive){
				div.toggle();
			}else{
				var selections = StickyNote.getMissedSelections();
				var ul = jQuery('ul', div);
				var li = jQuery('li', ul);
				ul.empty();
				jQuery.each(selections,function(){
					var clone = li.clone();
					var self = this;
					clone.bind('click',function(){
						var noteId = self.selectionId;
						if(!self.hasRequestedComments){
							StickyNote.callFactory.sendRequest({url: '/loadcomments.js?callback=getCommentsCallback&noteID='+noteId});
							StickyNote.addListener('afterRequestComments', function(){
								buildComments(jQuery(clone), self);
							});
						}else{
							jQuery(this).children().toggle();
						}
					});
					ul.append(clone.html(this.selection));
				});
				div.append(ul).show();
				if(parseInt(div.css('height')) > 200){
					div.css('height', '200px');
				}
				hasBuiltArchive = true;
			}
			jQuery('.sn_item_collapsed').click(function(){
				jQuery(this).toggleClass('sn_item_collapsed').toggleClass('sn_item_expanded');
			});
		});

		jQuery('#archive_field_close').click(function(){
			jQuery('#archive_field').hide();
		});

		jQuery('#filterbyname').click(function(){
			var name = jQuery('#sn_username_input').val();
			StickyNote.filterFactory.getFilter('exactname').doFilter([name]);
		});
		
		jQuery('#sn_select').change(function(){
			if (jQuery(this).val()=='3')
				show_username();
			else {
				if(jQuery('.sn_username').css('display') == 'block'){
					jQuery('.sn_username').hide('fast');
				}
				switch (jQuery(this).val()){
					case '0':
						StickyNote.filterFactory.getFilter().doFilter();
						break;
					case '1':
						StickyNote.filterFactory.getFilter('friends').doFilter();
						break;
					case '2':
						StickyNote.filterFactory.getFilter('myself').doFilter();
						break;
					default :
						StickyNote.filterFactory.getFilter().doFilter();
				}
			}
		});	
}
