var nRating=0;
var nSubrating=[0,0,0,0];
var idDialog;
var idRating;
var idOverall;
var rateItLinkId="";

function iniDialog(id, idOv){
	idDialog = id;
	idOverall = idOv;
}

function dialogManager(e, id, position){
	closeDialog('rating_dialog');
    closeDialog('review_dialog');
    closeDialog('thank_you_dialog');
    $(id).style.display='block';

	/*
	switch(rating){
	case 1:
	  $('ratingtx').setHTML('Liked it');
	  break    
	case 2:
	  $('ratingtx').setHTML('Really Liked it');
	  break
	case 3:
	  $('ratingtx').setHTML('Loved it');
	  break
	case 4:
	  $('ratingtx').setHTML('Really Loved it');
	  break
	case 5:
	  $('ratingtx').setHTML('Favorite');
	  break
	default:
	  $('ratingtx').setHTML('Liked it');
	  }
	*/
    if ( typeof position == "undefined" ) {
        var posx=0,posy=0;
        if(e==null) e=window.event;
        if(e.pageX || e.pageY){//FFx
            posx=e.pageX;
            posy=e.pageY;
        }else if(e.clientX || e.clientY){//IE
            if(document.documentElement.scrollTop){
                posx=e.clientX-document.documentElement.scrollLeft;
                posy=e.clientY+document.documentElement.scrollTop;
            }else{
                posx=e.clientX-document.body.scrollLeft;
                posy=e.clientY-document.body.scrollTop;
            }
        }
        //alert("top: "+(posy+20)+", left: "+(posx-20));
        $(id).style.top = (posy+20)+'px';
        $(id).style.left = (posx-20)+'px';
		$(id).style.width = '300px';
    }
    else {
        $(id).style.top = position[0];
        $(id).style.left = position[1];
		$(id).style.width = '300px';
    }
}

function closeRatingDialogs(){
	$("rating_dialog").style.display='none';
    $("review_dialog").style.display='none';
    $("thank_you_dialog").style.display='none';
    reset_review_fields();
}

function closeDialog(id, clear_review){
	$(id).style.display='none';
    if ( typeof clear_review != "undefined" ) {
        reset_review_fields();
    }
}

function showReviewDialog(evnt, dialog_id, rating_id) {
    var rating = $F('listing_rating');
    nRating = rating;
    $(rating_id).style.width=(rating*18)+'px';
    dialogManager(evnt, dialog_id);
    Element.hide($('thank_you'));
    Element.show($('review_dialog_title'));
    Element.hide($('review_errors'));
}

function showRateItDialog(evnt, dialog_id, listing_type, listing_id, rateit_link_id) {
    if ( typeof listing_type != "undefined" ) {
        $('listing_type').value=listing_type;
        if ($("rating_data_accommodation")) Element.hide("rating_data_accommodation");
        if ($("rating_data_restaurant")) Element.hide("rating_data_restaurant");
        if ($("rating_data_attraction")) Element.hide("rating_data_attraction");
        if ($("rating_data_nightlife_spot")) Element.hide("rating_data_nightlife_spot");
        if ($("rating_data_store")) Element.hide("rating_data_store");
    }
    if ( typeof listing_id != "undefined" ) {
        $('listing_id').value=listing_id;
    }
    if ( typeof rateit_link_id != "undefined" ) {
        rateItLinkId=rateit_link_id;
    }
    showRatingDialog(evnt, dialog_id);
}

function showRatingDialog(evnt, dialog_id, show_errors, position) {
    Element.hide($('review_dialog_title'));
    Element.show($('thank_you'));

    if (show_errors==true)
        Element.show($('review_errors'));
    else
        Element.hide($('review_errors'));

    var listing_type = $('listing_type').value;
    if ( typeof listing_type != "undefined" ) {
        Element.show("rating_data_"+ listing_type.toLowerCase());
    }
    dialogManager(evnt, dialog_id, position);
}

function submit_rating_with_position(event, rating, dialog_id, rating_id1, rating_id2){
    var position = new Array();
    position[0] = $('rating_dialog').style.top;
    position[1] = $('rating_dialog').style.left;
    submit_rating(event, rating, dialog_id, rating_id1, rating_id2, position)
}

function submit_rating(event, rating, dialog_id, rating_id1, rating_id2, postition){
    rate(rating,rating_id1,rating_id2);
    disable_rate();
    showRatingDialog(event, dialog_id, false, postition)

    $('listing_rating').value = rating;

    var listing_rating=rating;
    var listing_type=$F('listing_type');
    var listing_id=$F('listing_id');
    if (listing_rating != "undefined" ) {
        var query = 'listing_type='+listing_type+'&listing_id='+listing_id+'&listing_rating='+listing_rating;
        //alert(query)
        new Ajax.Request('/rate', {method:'post', postBody:query, asynchronous:true});
    }
}

function rate(rating, id1, id2){
    nRating = rating;
    update_rating_stars(rating, id1, id2);
}

function rate_subrating(rating, index, id1, id2){
    nSubrating[index] = rating;
    update_rating_stars(rating, id1, id2);
}

function update_rating_stars(width, id1, id2){
    width = width * 18;
    if ( id1 && $(id1) ) {
        $(id1).style.width=width+'px';
    }
    if ( id1 && $(id1+'2') ) {
        $(id1+'2').style.width=width+'px';
    }
    if ( id2 && $(id2) ) {
        $(id2).style.width=width+'px';
    }
}

function submit_review(event, rating_id, review_id, thank_you_id) {
    var position = new Array();
    position[0] = $(review_id).style.top;
    position[1] = $(review_id).style.left;
    var errors = validate_review();

    if (errors==true) {
        Element.show($('review_errors'));
        return false;
    }

    dialogManager(event, thank_you_id, position);
    disable_review();

    var listing_type=$F('listing_type');
    var listing_id=$F('listing_id');
    var listing_rating=nRating;
    var review_screen_name=encodeURIComponent($F('review_screen_name'));
    var review_email=encodeURIComponent($F('review_email'));
    var review_city=encodeURIComponent($F('review_city'));
    var review_state=$F('review_state');
    var review_title=encodeURIComponent($F('review_title'));
    var review_text=encodeURIComponent($F('review_text'));
    var query = 'listing_type='+listing_type+'&listing_id='+listing_id;
    if (listing_rating >0 ) {
        $('listing_rating').value=listing_rating;
        query += '&listing_rating='+listing_rating;
        if ($(rating_id)) {
            $(rating_id).style.width=(listing_rating*18)+'px';
        }
        disable_rate();
    }
    query += '&listing_subrating='+nSubrating[1]+',';
    query += nSubrating[2]+',';
    query += nSubrating[3];
    query += '&review[screen_name]='+review_screen_name;
    query += '&review[email]='+review_email;
    query += '&review[city]='+review_city;
    query += '&review[state]='+review_state;
    query += '&review[review_text]='+review_text;
    query += '&review[review_title]='+review_title;
    //alert(query)
    new Ajax.Request('/review', {method:'post', postBody:query, asynchronous:true});
    $('user_screen_name').value = $F('review_screen_name');
    reset_review_fields();
}

function reset_review_fields() {
    var screen_name = $F('user_screen_name');
    if ( '' == screen_name ) {
        screen_name = 'Pick a Screen Name';
    }
    reset_review_field('review_screen_name', screen_name);
    reset_review_field('review_email','Enter Your e-mail');
    reset_review_field('review_city','Your City');
    reset_review_field('review_state','CA');
    reset_review_field('review_title','Your Review Title');
    reset_review_field('review_text','Your Review');
}

function reset_review_field(element_id, value) {
    var default_fontStyle = "italic";
    var default_color = "#999999";
    var element = $(element_id);
    if (element) {
        element.value = value;
        element.style.fontStyle = default_fontStyle;
        element.style.color = default_color;
    }
}

function disable_rate () {
    var nothing = do_nothing;
    if ($('rateit_link')) $('rateit_link').onclick=nothing;
    if ($('rateit_link_2')) $('rateit_link_2').onclick=nothing;
    if ($('overall_in_1')) {
        $('overall_in_1').onclick=nothing;
        $('overall_in_1').addClassName("no-star");
        $('overall_in_1').removeClassName("one-star");
    }
    if ($('overall_in_2')) {
        $('overall_in_2').onclick=nothing;
        $('overall_in_2').addClassName("no-star");
        $('overall_in_2').removeClassName("two-stars");
    }
    if ($('overall_in_3')) {
        $('overall_in_3').onclick=nothing;
        $('overall_in_3').addClassName("no-star");
        $('overall_in_3').removeClassName("three-stars");
    }
    if ($('overall_in_4')) {
        $('overall_in_4').onclick=nothing;
        $('overall_in_4').addClassName("no-star");
        $('overall_in_4').removeClassName("four-stars");
    }

    if  (rateItLinkId!="") {
        if ($(rateItLinkId)) $(rateItLinkId).onclick=nothing;
        rateItLinkId="";
    }
}

function do_nothing() {
  return false;
}

function disable_review () {
    if ($('review_link')) $('review_link').onclick=do_nothing;
}

function validate_review() {
    var error_msg_div = $('error_messages');
    var review_screen_name=$F('review_screen_name');
    var review_email=$F('review_email');
    var review_title=$F('review_title');
    var review_text = $F('review_text');
    var errors = false;
    var msg = '';
    if (review_screen_name=="" || review_screen_name=="Pick a Screen Name") {
        msg = msg + "<li>Your screen name</li>";
        errors = true;
    }
    if (review_email==""|| review_email=="Enter Your e-mail") {
        msg = msg + "<li>Your e-mail address</li>";
        errors = true;
    }
    else if ( !validate_email(review_email) ) {
        msg = msg + "<li>Your valid e-mail address</li>";
        errors = true;
    }
    if ( !(nRating>0) ) {
        msg = msg + "<li>Overall rating</li>";
        errors = true;
    }
    if (review_title=="" || review_title=="Your Review Title") {
        msg = msg + "<li>Your review title</li>";
        errors = true;
    }
    if (review_text=="" || review_text=="Your Review") {
        msg = msg + "<li>Your review</li>";
        errors = true;
    }
    if ( $('review_agree').checked==false ) {
        msg = msg + "<li>Agree to Terms and Service</li>";
        errors = true;
    }
    if (msg!='') {
        msg='<ul class="error_messages">'+msg+'</ul>';
    }
    error_msg_div.innerHTML = msg;
    return errors;
}



