window.addEvent("domready", function() {
	if (tab == "top" && logged) new WriteReviewBox();
	if (tab == "top" && !logged) new WriteReviewLoginBox();
	if (tab != "top" && logged) new ReviewPopup();
	if (tab != "top" && !logged) new LoginJump();
	if (tab == "photos") new Photos();
	if (tab == "top") new ItemContents();	
});


Element.extend({
	addRow: function(cells)
	{
		var row = new Element("tr").injectInside(this);
		cells.each(function(cell){
			cell.injectInside(row);
		});
	}
});

/**
	JS for the stars selector in review box
**/
var StarsManager = new Class({
	rate: 0,
	
	initialize: function(){
		this.stars = $$('#stars_container td');
		$('stars_container').addEvent("mouseleave", this.leaveRate.bind(this));		
		this.stars.each(function(cell, idx){
			cell.addEvent("mouseenter", this.showRate.bind(this, idx + 1));
			cell.addEvent("click", this.setRate.bind(this, idx + 1));			
		}.bind(this));	
	},
	
	ratings: [
		"",
		"Very bad", "Very bad",
		"Bad", "Bad",
		"Average", "Average",
		"Good", "Good",
		"Very good", "Very good",
	],
	
	showRate: function(rate){
		this.stars.each(function(cell, idx){
			var full = rate > idx ? "f" : "e";
			var pos = idx % 2 == 0 ? "l" : "r";
			cell.className = full + pos;
			$('stars_word').setText(this.ratings[rate]);
		}.bind(this));		
		
	},		
	
	leaveRate: function(){
		this.showRate(this.rate);
	},
	
	setRate: function(rate){
		this.rate = rate;
	}
});

/**
	Jumps to login when clicked
**/
var LoginJump = new Class({
	initialize: function(){
		$('writeReview').addEvent("click", this.login);
	},
	login: function(){
		window.location = "/members/login/ref";
	}	
});

/**
	Handles Write a Review Box when the user is not logged in.
**/
var WriteReviewLoginBox = LoginJump.extend({
	initialize: function(){
		this.parent();
		$$('div.writereview').addEvent("mouseenter", this.enter.bind(this));
		$$('div.writereview').addEvent("mouseleave", this.leave.bind(this));
	},
		
	enter: function(){
		var writeReview = $$('div.writereview')[0];
		var divRate = $$('div.writereview table')[0];
		divRate.setStyle("visibility", "hidden");
		if (!this.loginDiv)
		{
			this.loginDiv = new Element("div").addClass("login").injectTop(writeReview);		
			new Element("A", {
				href: "/members/login/ref"
			}).setText("Login to Rate").injectInside(this.loginDiv);
		}
		else
		{
			this.loginDiv.setStyle("display", "block");
		}
		
	},
	
	leave: function(){
		var divRate = $$('div.writereview table')[0];
		divRate.setStyle("visibility", "visible");
		this.loginDiv.setStyle("display", "none");
	}		
});

/**
	Handles Write a Review Box when the user is logged in.
**/
var WriteReviewBox = new Class({
	initialize: function(){
		$('writeReview').addEvent("click", this.jump);		
		this.form = $(document.forms[1]);		
		$(this.form.comment).addEvent("keypress", this.commentFocus);		
		this.stars = new StarsManager(this.form.rating);		
		$('writeReview_submit').addEvent("click", this.submit.bind(this));
	},
	
	jump: function(){
		window.location = "#review";
		$('writeReview_comment').focus();
	},
	
	commentFocus: function(){
		this.form.comment.setAttribute("rows", 10);
		$('writeReview_title').setStyle("display", "block");		
	},
	
	validate: function(){
		if (this.form.rating.value == 0)
		{
			alert("Please select a rating by clicking the stars");
			return false;
		}
		else if (this.form.comment.value.length < 100)
		{
			alert("Please write at least 100 characters");
			return false;
		}
		return true;
	},
	
	submit: function(){
		this.form.rating.value = this.stars.rate / 2;
		
		if (this.validate())
		{
			$('writeReview_submit').value="Saving...";
			$('writeReview_submit').disabled = true;
			this.form.send({onComplete: function(response){
				this.form.reset();
				window.location = "/members/profile";
				$('writeReview_submit').disabled = false;
			}.bind(this)});		
		}
	}
});

/**
	Shows the popup for writing a review
**/
var ReviewPopup = new Class({
	initialize: function(){
		$("writeReview").addEvent("click", this.setRate.bind(this, 0));
	},
	
	setRate: function(rate){
		if (this.disableClick)
		{
			return;
		}
		new Ajax("/members/loginState", {onComplete: function(response){
			if (response != "true"){
				window.location = "/members/login/ref";
			}
		}}).request();
		this.disableClick = true;
		var div = new Element("div", {
			id: "new_rating"
		}).injectInside(document.body);		
		var closeDiv = new Element("div").injectInside(div);
		closeDiv.addClass("close");		
		var close = new Element("img", {
			src: "/img/closelabel.gif"
		}).injectInside(closeDiv);			
		close.addEvent("click", function(){
			div.remove();
			this.disableClick = false;
		}.bind(this));		
		new Element("div").addClass("info").setText("Write a review for " + itemName).injectInside(div);		
		var form = new Element("form", {
			action: "/contacts/rate/" + itemId
		}).injectInside(div);
		var table = new Element("table").injectInside(form);
		table.addClass("green_form");		
		table = new Element("tbody").injectInside(table);		
		var starsTd = new Element("td");
		var select = new Element("select", {name: "rating"}).injectInside(starsTd);
		for (var i = 0; i < 10; i++)
		{
			new Element("option", {value: (i+1)/2}).setText((i+1)/2).injectInside(select);
		}
		select.value = rate/2;
		table.addRow([
			new Element("th").setText("Rating"),
			starsTd
		]);
		var td1 = new Element("td");
		new Element("input", {name: "title", type: "text", size: "50"}).injectInside(td1);
		td1.appendText(" (Optional)");
		table.addRow([
			new Element("th").setText("Title"), td1			
		]);		
		var row2 = new Element("tr").injectInside(table);
		new Element("th").setText("Comment").injectInside(row2);
		var td2 = new Element("td").injectInside(row2);
		var comment = new Element("textarea", {name: "comment", cols: "50", rows: "5"}).injectInside(td2);
		var post = new Element("input", {type: "button", value: "Save"}).injectInside(form);
		post.addClass("post_button");
		post.addEvent("click", function(){
			if (comment.value.length < 100)
			{
				alert("Please write at least 100 characters");
				return;
			}
			form.send({onComplete: function(response){
				select.setStyle("visibility", "hidden");
				div.getChildren().setOpacity(0.05);
				var message = new Element("div").addClass("message").injectInside(div);
				new Element("div").appendText("Thanks for posting.").injectInside(message);
				new Element("div").appendText("This page will be reloaded in 5 seconds.").injectInside(message);				
				
				setTimeout(function(){
					window.location = "/members/profile";
				}, 5000);
			}})
		}.bind(this));		
		div.setStyle("left", ((window.getWidth() - div.offsetWidth) / 2));
		div.setStyle("top", ((window.getHeight() - div.offsetHeight) / 2) + $(window).getScrollTop());	
		return false;
	},
	
	ratingComplete: function(){
		alert("Thanks!");
	}
});

/** ????????? **/
var ItemContents = new Class({	
	initialize: function(){
		this.links = $$("li.ic_catselect");
		this.categories = $$("div.ic_category");
		if (this.links.length == 0)
		{
			return;
		}
		this.links.each(function(link, idx) {
			link.addEvent("click", this.openDiv.bind(this, idx));
		}.bind(this));		
		this.openDiv(0);
	},
	
	openDiv : function(idx){		
		this.categories.each(function(c, i){c.setStyle("display", i==idx?"block":"none")});
		this.links.removeProperty("class");
		this.links[idx].addClass("active");
		$('innerItemContents').setStyle("height", this.categories[idx].offsetHeight);
	}
});

var Photos = new Class({
	initialize: function(){
		var photos = $$('.photos_right a.small');
		if (photos.length == 0) return;		
		photos.each(function(link) {
			link.onclick = this.showImage.pass(link.href);
		}.bind(this));		
		this.actual = 0;
		this.pages = photos.length / 5;
		if (this.pages > 1)
		{
			this.scroll = new Fx.Scroll('slide', {
					wait: false,
					offset: {x: -8, y: 0},
					duration: 500,				
					transition: Fx.Transitions.Quad.easeInOut
				});
			$('pr_next').setStyle("visibility", "visible");
			$('pr_previous').addEvent("click", this.previous.bind(this));
			$('pr_next').addEvent("click", this.next.bind(this));
			this.toImage(0);
		}
	},
	
	showImage: function(href)
	{
		$('main_photo').src = href;
		var id = href.indexOf("cache") > 0 ? href.split("_")[3] : href.split("/")[5];
		new Ajax("/ajax/contacts/detailPhoto/" + id, {
			update: $('photo_info')
		}).request();
		return false;
	},
	
	toImage: function(idx)
	{
		this.scroll.toElement('photos_right_' + idx);
	},
	
	previous: function(){
		if (this.actual > 0)
		{
			this.toImage(--this.actual);			
		}		
		$('pr_next').setStyle("visibility", "visible");
		if (this.actual == 0)
		{
			$('pr_previous').setStyle("visibility", "hidden");
		}		
	},
	
	next: function(){
		if (this.actual < this.pages)
		{
			this.toImage(++this.actual);
			$('pr_previous').setStyle("visibility", "visible");
			if (this.actual == this.pages - 1)
			{
				$('pr_next').setStyle("visibility", "hidden");
			}
		}		
	}
});

function goodPhoto(id)
{
	new Ajax("/ajax/photos/rate/" + id + "/good", {onComplete: function(res){
		new Ajax("/ajax/contacts/detailPhoto/" + id, {
			update: $('photo_info')
		}).request();
	}}).request();
	return false;
}

function badPhoto(id)
{
	new Ajax("/ajax/photos/rate/" + id + "/bad", {onComplete: function(res){
		new Ajax("/ajax/contacts/detailPhoto/" + id, {
			update: $('photo_info')
		}).request();	
	}}).request();
	return false;
}

function useful(id)
{
	var url = '/compliments/makeCompliment?review=' + id;	
	var ajax = new Ajax(url, {onComplete: function(result) {
		$('c' + id).setText("(" + result + ")");
	}}).request();
	return false;
}

function validate_cu(form)
{
	if (!form['name'].value)
	{
		alert("Please enter your name");
		return false;
	}
	if (!form['mail'].value)
	{
		alert("Please enter your mail");
		return false;
	}
		if (!form['comment'].value)
	{
		alert("Please write some comment");
		return false;
	}
	return true;
}

var mobileDiv;

function sendToPhone()
{
	var right = (window.getWidth()-950)/2 + 20;
	
	if (mobileDiv)
	{
		mobileDiv.remove();
		mobileDiv = null;
	}
	
	var div = new Element("div").injectInside(document.body);
	div.setStyles({
		position: "absolute",
		top: 260,
		right: right,
		"z-index": 100
	});
	mobileDiv = div;
	
	var url = "/contacts/sendToPhone/" + itemId;
	var ajax = new Ajax(url, {update: div, onComplete: function(){
		var cancel = div.getElement("a[name=cancel]");
		var send = div.getElement("a[name=post]");
		var form = div.getElement("form");
		cancel.onclick = function(){ div.remove(); mobileDiv = null; return false; };
		send.onclick = function(){
			if (!form['mail'].value)
			{
				alert('Please write a mail address');
				return false;
			}
			form.send({method: 'post', update: div, onComplete: function(res) {
				setTimeout(function() {div.remove(); mobileDiv = null;}, 2000);
			}});
			div.getElement('#ims_middle').setText("Sending...");			
		};
	}}).request();
	return false;
}

var ComplimentWindow = new Class({
  initialize: function(e, id) {
    if (!logged)
    {
      window.location = "/members/login/ref";
      return;
    }
    $$('div.compliment_window').each(function(div) {div.remove()});
    var event = new Event(e);
    var div = new Element("div").injectInside(document.body);
    var tc = $(event.target).getCoordinates();
    div.addClass("compliment_window");    
    var ofy = window.getSize().size.y - event.client.y > 250 ? 40 : -243;    
    div.setStyles({      
      position: "absolute",
      top: tc.top + ofy,
      left: tc.left,
      "z-index": 100
    });
    var url = "/ajax/compliments/show/" + id;
    var ajax = new Ajax(url, {update: div, onComplete: function() {
      div.getElement("img[name=cancel]").addEvent("click", function() {
        div.remove();
      });
    }}).request();
  }
});

function openSubWindow(target) {
  var subwindow = window.open('/mypages/category', 'child', 'width=600, height=550, status=0, location=0, resizable=1, scrollbars=1, toolbar=0');
  subwindow.target = target;
  subwindow.focus();
}

function jumpHome(id)
{
	window.open('/contacts/homePage/' + id);
	return false;
}

function showPhotoMap()
{
	$('map_photo').setStyle("display", "block");	
	$('map_google').empty();	
}

function showGoogleMap(longitude, latitude)
{
	$('map_photo').setStyle("display", "none");
	$('map_google').innerHTML = "<iframe src=\"/contacts/map/" +  longitude + "/" + latitude + "/map\" width=\"600\" height=\"600\"></iframe>";
}