UPLOADED_IMAGES_DIR = "/files";

$.rule('ul#navigation li:hover ul{}').appendTo('link').css('display','none');

// Style form elements
$(function(){ $("select:not(.selectbox), input:checkbox").uniform(); });

$("#navigation>li").hover(
    function () {
        $(this).find("ul").slideDown("fast");
    },
    function () {
        $(this).find("ul").slideUp("fast");
    }
);

var COOKIE_NAME = 'dashboard_visibility';
var options = { path: '/', expires: 10 };

var switcher = 0;

function show_dashboard(animate) {
    switcher = 1;
    $.cookie(COOKIE_NAME, 'visible', options);
    if (animate == false) {
        $('#overview-container').show();
    }
    else {
        $('#overview-container').slideDown();
    }
    $("#button-toggle-overview").text('Close X');
}

function hide_dashboard() {
    switcher = 0;
    $.cookie(COOKIE_NAME, 'invisible', options);
    $('#overview-container').slideUp();
    $("#button-toggle-overview").text('Open Dashboard');
}

if ($.cookie(COOKIE_NAME) == 'visible') {
    show_dashboard(false)
}

$("#button-toggle-overview").click(function () {
	if (switcher == 0) {
        show_dashboard();
    }
    else if (switcher == 1) {
        hide_dashboard();
    }
    return false
});

$("#button-new-message").toggle(
	function () {
		$("#new-message-form").slideDown();
        return false;
    },
    function () {
    	$("#new-message-form").slideUp();
        return false;
      }
);

function slide_up_all () {
    $("#request-tender-detail").slideUp();
	$("#winning-tender-detail").slideUp();
	$("#create-dispute-detail").slideUp();
}



/**
 * Allow us to centralise the display of portfolio
 * items, with their appropriate thumbnail.
 * --David Doran, 25th Feb
 */
function portfolioThumbnail(item)
{
	if ("unsupported" != item["subclass"]) {
		if ("image" == item["class"]) {
			return "<li><a href=\""+item.url+"\" id=\"portfolio-image-"+item.id+"\" class=\"portfolio-image\"><img src=\""+item.url_thumb+"\" /></a></li>";
		} else if ("video" == item["class"]) {
			return "<li><a href=\""+item.url+"\" id=\"portfolio-image-"+item.id+"\" class=\"portfolio-video\"><img src=\"/media/images/mov-icon.png\" /></a></li>";
		} else if ("document" == item["class"]) {
			return "<li><a href=\""+item.url+"\" id=\"portfolio-image-"+item.id+"\" class=\"portfolio-document\"><img src=\"/media/images/doc-icon.png\" /></a></li>";
		}
	}
	return "<li><a href=\""+item.url+"\" id=\"portfolio-image-"+item.id+"\"><img src=\"/media/images/generic-icon.png\" /></a></li>";
}

$("#button-request-tender").click(
    function () {
		slide_up_all();
		if ($("#request-tender-detail").css("display") =="none") {
        	$("#request-tender-detail").slideDown();
		}
        return false;
      }
);
$("#button-winning-tender").click(
    function () {
		slide_up_all();
		if ($("#winning-tender-detail").css("display") =="none") {
			$("#winning-tender-detail").slideDown();
		}
        return false;
      }
);
$("#button-create-dispute").click(
    function () {
		slide_up_all();
		if ($("#create-dispute-detail").css("display") =="none") {
        	$("#create-dispute-detail").slideDown();
		}
        return false;
      }
);


$("#search-string").focus(function () {
    if(this.value == 'Search Site') {this.value = '';}}
);
$("#search-string").blur(function () {
    if (this.value == '') {this.value = 'Search Site';}}
);

$("#newsletter-first-name").focus(function () {
    if(this.value == 'First Name') {this.value = '';}}
);
$("#newsletter-first-name").blur(function () {
    if (this.value == '') {this.value = 'First Name';}}
);

$("#newsletter-last-name").focus(function () {
    if(this.value == 'Last Name') {this.value = '';}}
);
$("#newsletter-last-name").blur(function () {
    if (this.value == '') {this.value = 'Last Name';}}
);

$("#newsletter-email-address").focus(function () {
    if(this.value == 'Email Address') {this.value = '';}}
);
$("#newsletter-email-address").blur(function () {
    if (this.value == '') {this.value = 'Email Address';}}
);

function empty_textbox (obj, val) {
    if(obj.value == val) {obj.value = '';}
}
function populate_textbox (obj, val) {
    if (obj.value == '') {obj.value = val;}
}

function showaddnote (img, area) {
	var attachment_id = $(img).attr("id").substring("image-".length);

    // imgOffset = $(img).offset();
	form_left  = parseInt(area.x1);
	if ($.browser.msie && $.browser.version.substr(0,1)<7) {
		form_left  = parseInt(area.x1) - $(img).width();
	}
	form_top   = parseInt(area.y1) + parseInt(area.height)+15;

	$('#noteform-'+attachment_id).css({ left: form_left + 'px', top: form_top + 'px'});
	$('#noteform-'+attachment_id).show();

	$('#noteform-'+attachment_id).css("z-index", 10000);
	$('#NoteX1-'+attachment_id).val(area.x1);
	$('#NoteY1-'+attachment_id).val(area.y1);
	$('#NoteHeight-'+attachment_id).val(area.height);
	$('#NoteWidth-'+attachment_id).val(area.width);
}

add_comment = function (data) {
	if (data.success == true) {
		var comment_template = $.nano("\
	    <li id=\"comment-{id}\" class=\"comment hidden just-added\">\
		<ul class=\"comment-meta\">\
		    <li class=\"actor\">{person_name}</li>\
		    <li class=\"date\">{date}</li>\
		    <li class=\"time\">{time}</li>\
		</ul>\
		<p class=\"comment-text\">{text}</p>\
		</li>", data)
		var added_comment = $("#comments-" + data.attachment_id).prepend(comment_template);
		added_comment.children("li").eq(0).slideDown();

		var notify_text = "Comment Successfully Added";
		var notify_type = "success";

        $(".new-comment-form .button").html("Add Comment")
        $(".new-comment-form .button").attr("disabled", "")
        $(".new-comment-form textarea").attr("value", "")

	}
	else {
		var notify_text = data.fail_text;
		var notify_type = "error";
	}

	$.notifyBar({
	    html: notify_text,
		notifyType: notify_type,
	    delay: 2000,
	    animationSpeed: "normal"
	  });
}

function change_plan(eventObject){
	var index = $(this).parent().prevAll().length + 1;

	$(".checkbox").attr('checked', false);
	$(this).attr('checked', true);

	$('#membership-plan-table td, #membership-plan-table th.col-head').removeClass("selected-col");
	$('#membership-plan-table td:nth-child('+index+'), #membership-plan-table th.col-head:nth-child('+index+')').addClass("selected-col");

	$('#membership-plan-table .current-plan td').removeClass("selected-col");
}

function hide_welcome_message(eventObject) {
	// AJAX request needs to be un-commented during integration with the backend
	var message_slug = $("#hide-welcome-message").attr("value");
	$.post("/messages/forget", { slug: message_slug },
    function(data){
		$("#welcome-message").slideUp();
		return false;
	}, "json");

}

function action_formatter (action, options, rowObject){
	var update_text = "",
	message_text = "",
	shortlisted_text = "";

	if ( action.updated == true ) {
		update_text = "<span class=\"invisible-delimiter\"> - </span><em class=\"update\">Update</em>"
	}
	if ( parseInt(action.messages) > 0 ) {
		message_text = "<span class=\"invisible-delimiter\"> - </span><em class=\"message-count\">"+action.messages+"</em>"
	}
	if ( action.shortlisted == true ) {
		shortlisted_text = " class=\"shortlisted\""
	}

	code = "<ul class=\"action-panel\"> \
				<li id=\"action-view\" class=\"first\" title=\"View Tender Details\"><a href=\"/projects/"+current_project_id+"/tenders/"+$(rowObject).attr("id")+"\"><span class=\"title\">View</span>"+update_text+"</a></li> \
				<li id=\"action-message\"><a href=\"#\" title=\"View Message Thread\"><span class=\"title\">Message</span>"+message_text+"</a></li> \
				<li id=\"action-profile\"><a href=\"#\"  title=\"Supplier's Profile\"><span class=\"title\">Profile</span></a></li> \
				<li id=\"action-shortlist\""+shortlisted_text+" title=\"Shortlist Tender\"><a href=\"#\"><span class=\"title\">Shortlist</span></a></li> \
				<li id=\"action-delete\"><a href=\"#\" title=\"Delete Tender\"><span class=\"title\">Delete</span></a></li> \
				<li id=\"action-award\" class=\"last\"><a href=\"/projects/"+current_project_id+"/award/"+$(rowObject).attr("id")+"\" title=\"Award Project\"><span class=\"title\">Award</span></a></li> \
			</ul>";
	return code;
}

function submission_formatter (action, options, rowObject){
	return action.submission_deadline;
}

function type_formatter (action, options, rowObject) {
	var ret = '';
	if (action.user.type == 'supplier') {
		if (action.user.featured == "0") {
			ret = "<a href='/admin/feature/" + action.user.id + "' title='Feature supplier' onclick='return confirm(\"Are you sure you want to feature this supplier?\")'>[+]</a>";
		} else if (action.user.featured == "1") {
			ret = "<a href='/admin/unfeature/" + action.user.id + "' title='Unfeature supplier' onclick='return confirm(\"Are you sure you want to unfeature this supplier?\")'>[-]</a>";
		}
	}

	if (action.user.type == 'supplier') {
	    ret += " <a href='/admin/deactivate/" + action.user.id + "' title='Deactivate supplier' onclick='return confirm(\"Are you sure you want to deactivate this supplier?\")'>[x]</a>";
	}
    user_type = (action.user.type == "supplier") ? "Supplier" : "Purchaser";
	return user_type + "  " + ret;
}
function favourite_formatter (action, options, rowObject){
	var favourited_text = "";

	if ( action.favourited == true ) {
		favourited_text = " class=\"favourited\"";
	}

	code = "<ul class=\"favourite-panel\"> \
				<li id=\"action-favourite\""+favourited_text+"><a href=\"#\"><span class=\"title\">Favourite</span></a></li> \
			</ul>";
	return code;
}

function tender_formatter (action, options, rowObject){
	var update_text = "",
	message_text = "",
	shortlisted_text = "";

	if ( action.updated == true ) {
		update_text = "<span class=\"invisible-delimiter\"> - </span><em class=\"update\">Update</em>"
	}
	if ( parseInt(action.messages) > 0 ) {
		message_text = "<span class=\"invisible-delimiter\"> - </span><em class=\"message-count\">"+action.messages+"</em>"
	}

	code = "<ul class=\"action-panel\"> \
				<li id=\"action-view\" class=\"first\"><a href=\"#\"><span class=\"title\">View</span>"+update_text+"</a></li> \
				<li id=\"action-message\"><a href=\"#\"><span class=\"title\">Message</span>"+message_text+"</a></li> \
				<li id=\"action-edit\" class=\"last\"><a href=\"#\"><span class=\"title\">Edit</span></a></li> \
			</ul>";
	return code;
}

Object.size = function(obj) {
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};


function append_tender_details (rowid, rowdata, rowelem) {
    var tr_id = rowid,
    row_data = rowdata.meta,
    build_table = "",
    build_images = "",
	build_attachments = "",
	profile = "",
	portfolio = "",
	content = "",
    total_time = 0,
    total_cost = 0;

	$.each(row_data.milestones, function(i, item){
        build_table = build_table + $.nano("\
        <tr> \
            <td>"+(i+1)+" - {title}</td> \
            <td class=\"description\"><pre>{description}</pre></td> \
            <td>{time} days</td> \
            <td>${cost}</td> \
        </tr>", item)
        total_time = total_time + parseInt(item.time)
        total_cost = total_cost + parseInt(item.cost)
    });

	var name_length = "";
	var attachmentsSize = 0;
	if (row_data.attachments != undefined && Object.size(row_data.attachments) > 0) {
		attachmentsSize = Object.size(row_data.attachments);
		build_attachments += "<li>";
	}

	var x = 1;

	$.each(row_data.attachments, function(i, item) {
		name_length += item.name;

		if (item.type == 'application/octet-stream' || item.type == 'video/mp4') {
            build_attachments += "<a class=\"attach-video\" id=\""+item.name+"\" image-id=\""+item.id+"\" href=\"" + item.url + "\">";
			build_attachments += item.name;
			build_attachments += "</a>";
		} else if (item.type.indexOf('image') != -1) {
			build_attachments += "<a class=\"attach-image\" href=\""+item.url+"\" image-id=\""+item.id+"\" id=\"attachment-image-" + i + "\">";
			build_attachments += item.name;
			build_attachments += "</a>";
		} else {
			build_attachments += "<a href=\""+item.url+"\" id=\"attachment-image-" + i + "\">";
			build_attachments += item.name;
			build_attachments += "</a>";
		}
		if (attachmentsSize > x) {
			build_attachments += "&nbsp;|&nbsp;";
		}

		if (name_length.length > 100) {
			build_attachments += "</li><li>";
			name_length = "";
		}

		++x;
	});
    if (row_data.attachments != undefined && row_data.attachments[0] != undefined) {
		build_attachments += "</li>";
	}

	//<a href=\"#\" class=\"button\" id=\"button-delete-tender\"><span></span>Delete</a> \
    profile = $.nano("\
    <div id=\"tender-details\"> \
        <h2>Tender Details</h2> \
        <p class=\"description\"><pre>{proposal_details}</pre></p> \
    </div> \
    \
    <div id=\"tender-detail-buttons\"> \
        <a href=\"/projects/"+current_project_id+"/award/"+rowid+"\" class=\"button\" id=\"button-award-tender\"><span></span>Award</a> \
        <a href=\"#\" class=\"button\" id=\"button-close-view\"><span></span>Close</a> \
    </div> \
    <div class=\"clear\"></div> \
    <table class=\"detail-table\" id=\"tender-bid-table\"> \
        <tr> \
            <th>Milestone</th> \
            <th>Description</th> \
            <th>Time</th> \
            <th>Cost</th> \
        </tr> \
        "+build_table+" \
        <tr class=\"total-row\"> \
            <td colspan=\"2\" align=\"right\">Total</td> \
            <td>"+total_time+" days</td> \
            <td>$"+total_cost+"</td> \
        </tr> \
        </table>", row_data);


		attachments = "";
		if (row_data.attachments != undefined && row_data.attachments.length != 0) {
			attachments = "<h2>Attached Files</h2> \
			<div id=\"carousel2-chosen\" style=\"height:100px;\"> \
			    <div class=\"wrapper\"> \
					  " + build_attachments + " \
				</div> \
			</div> \
			<div id=\"carousel-chosen-video\"></div>";
		}

	content = profile + attachments;
	$("tr#"+tr_id).attr("supplier_id", row_data.supplier_id);
    $("tr#"+tr_id).after("\
		<tr class=\"slidedown\"><td colspan=\"6\"><div class=\"hidden view-details\">"+content+"</div></td></tr>\
		<tr class=\"slidedown\"><td colspan=\"6\"><div class=\"hidden view-profile\">Loading Profile</div></td></tr>\
		<tr class=\"slidedown\"><td colspan=\"6\"><div class=\"hidden view-messages\">Loading Messages</div></td></tr>\
	");
}

function append_supplier_details (rowid, row_data, rowelem) {
    var tr_id = rowid,
    build_table = "",
    build_images = "",
	profile = "",
	portfolio = "",
	content = "",
    total_time = 0,
    total_cost = 0;


	var supplier_id = $(this).parents(".ui-row-ltr").attr("id");
	//var profile_container = $(this).parents(".ui-row-ltr").next().next().children().children()
	//<a href=\"/projects/"+current_project_id+"/award/"+rowid+"\" class=\"button\" id=\"button-award-tender\"><span></span>Award</a>
	var overview_template = "\
	<a href=\"#\" class=\"overview-toggle button left thin margin-right\" id=\"overview-link-"+rowid+"\"><span></span>Overview</a> <a href=\"#\" class=\"historyandfeedback-toggle button left thin margin-right\" style=\"width: 16em\" id=\"historyandfeedback-link-"+rowid+"\"><span></span>History and Feedback</a>\ <a href=\"#\" class=\"portfolio-toggle button left thin margin-right\" id=\"portfolio-link-"+rowid+"\"><span></span>Portfolio</a>\
	<div class=\"clear\"></div>\
	<div id=\"overview-"+rowid+"\" class=\"overview-section clear\">\
	<ul class=\"detail-list left\">\
    	<li><span class=\"title\">Name</span><span class=\"invisible-delimiter\"> - </span><div class=\"description\"><p>{supplier_name}</p></div></li>\
    	<li><span class=\"title\">Location</span><span class=\"invisible-delimiter\"> - </span><div class=\"description\"><p>{location}</p></div></li>\
    	<li><span class=\"title\">Profile</span><span class=\"invisible-delimiter\"> - </span><div class=\"description\"><pre>{meta.profile}</pre></div></li>\
    	<li class=\"last\"><span class=\"title\">Services</span><span class=\"invisible-delimiter\"> - </span><div class=\"description\"><pre>{meta.services}</pre></div></li>\
    </ul>\
    <img src=\"{meta.profile_image}\" class=\"right\" width=\"340\" />\
    <div class=\"clear\"></div>\
    </div>\
    ";

    var build_reviews = "";
    if (row_data.meta.history.reviews.length > 0) {
    	build_reviews = "<ul>";
    	$.each(row_data.meta.history.reviews, function(i, item){
    		build_reviews += "<li><span class=\"star-rating rate-{rating}\">" + item.score + "/5</span><br>\""+item.comment+"\" &mdash " + item.person_name +"</li>";
        });
    	build_reviews += "</ul>";
    }

    var historyandfeedback_template = "\
    	<div id=\"historyandfeedback-"+rowid+"\" class=\"historyandfeedback-section clear\">\
    		<ul class=\"detail-list left\">\
        		<li><span class=\"title\">Overall Rating</span><span class=\"invisible-delimiter\"> - </span><div class=\"description\"><p><span class=\"star-rating rate-{rating}\">{rating}/5</span> ({ratings_count} reviews)</p></div></li>\
        		<li><span class=\"title\">Total Projects</span><span class=\"invisible-delimiter\"> - </span><div class=\"description\"><p>{projects_count}</p></div></li>\
        		<li><span class=\"title\">Repeat Customers</span><span class=\"invisible-delimiter\"> - </span><div class=\"description\"><p>{repeats_count} of {customers_count}</p></div></li>\
        		<li><span class=\"title\">Joined</span><span class=\"invisible-delimiter\"> - </span><div class=\"description\"><p>{join_date}</p></div></li>\
        		<li class=\"last\"><span class=\"title\">Reviews</span><span class=\"invisible-delimiter\"> - </span><div class=\"description\">"+build_reviews+"</div></li>\
        	</ul>\
        	<div class=\"clear\"></div>\
        </div>";
    var historyandfeedback_section = $.nano(historyandfeedback_template, row_data.meta.history);

	var image_template = "";

    var profile_section = $.nano(overview_template, row_data);

    var portfolio_section = "<div id=\"portfolio-"+rowid+"\" class=\"portfolio-section clear\">";

    $.each(row_data.meta.portfolio, function(i, item){
        portfolio_section = portfolio_section + "<a href=\"#\" class=\"carousel-toggle\" id=\"carousel-"+rowid+"-"+i+"\">" + item.portfolio_name + "</a> | ";
        image_template = image_template + "\
        <div class=\"carousel profile-carousel\" id=\"car-"+rowid+"-"+i+"\" style=\"height:100px;\"> \
              <div class=\"wrapper\"> \
                <ul>";

        $.each(item.image_ids, function(i, image){
        	image_template = image_template + portfolioThumbnail(image);
        });

        image_template = image_template + " \
                </ul> \
            </div> \
        </div>";
    });

	if ((typeof row_data.meta.portfolio[0].image_ids) != "undefined" && typeof row_data.meta.portfolio[0].image_ids.length > 0) {
		image_template = image_template + "<div class=\"carousel-chosen-image\" id=\"carousel-chosen-image-"+rowid+"\"><img src=\"/files/"+row_data.meta.portfolio[0].image_ids[0].id+"/width/750/"+row_data.meta.portfolio[0].image_ids[0].id+".png\" /></div>";
	} else {
		image_template = image_template + "<div class=\"carousel-chosen-image\" id=\"carousel-chosen-image-"+rowid+"\"><img src=\""+""+"\" /></div>";
	}

    portfolio_section = portfolio_section + image_template;
    portfolio_section = portfolio_section + "</div>";


    $("tr#"+tr_id).after("\
		<tr class=\"slidedown\"><td colspan=\"6\"><div class=\""+((row_data.meta.selected)?(""):("hidden"))+" view-profile\">"+profile_section+historyandfeedback_section+portfolio_section+"</div></td></tr>\
	");
	if (row_data.meta.selected) {
		$("tr#"+tr_id).addClass('selected-supplier');
		$('html, body').animate({scrollTop: $(".selected-supplier:first").offset().top}, 700);
	}
}

function append_suppliers_tender_details (rowid, rowdata, rowelem) {
    var tr_id = rowid,
    row_data = rowdata.meta,
    build_table = "",
    build_milestones = "",
    build_files_rft = "",
    build_files_tender = "",
    build_files_proposal = "",
    build_categories = "",
    build_skills = "",
	profile = "",
	tender_details = "",
	content = "",
    total_time = 0,
    total_cost = 0;

    $.each(row_data.milestones, function(i, item){
    	item["num"] = i;
        build_table = build_table + $.nano("\
        <tr> \
            <td>"+(i+1)+" - {title}</td> \
            <td><p>{description}</p></td> \
            <td>{time} days</td> \
            <td>${cost}</td> \
        </tr>", item);
        build_milestones = build_milestones + $.nano("\
        <div class=\"individual-milestone\">\
            <h3>{title}<a href=\"#\" class=\"edit-link\">edit</a></h3>\
            <p>{description}</p>\
            <div class=\"milestone-time\">Time: <span class=\"amount\">{time} Days</span></div>\
            <div class=\"milestone-cost\">Cost: <span class=\"amount\">${cost}</span></div>\
            <div class=\"hidden milestone-id\">{id}</div>\
            <input type=\"hidden\" name=\"milestones[{num}][title]\" value=\"{title}\" />\
	        <input type=\"hidden\" name=\"milestones[{num}][description]\" value=\"{description}\" />\
	        <input type=\"hidden\" name=\"milestones[{num}][time]\" value=\"{time}\" />\
	        <input type=\"hidden\" name=\"milestones[{num}][cost]\" value=\"{cost}\" />\
	        <input type=\"hidden\" name=\"milestones[{num}][id]\" value=\"{id}\" />\
        </div>\
        ", item)
        total_time = total_time + parseInt(item.time)
        total_cost = total_cost + parseInt(item.cost)


    });


    if (row_data.skills.length>0) {
        $.each(row_data.skills, function(i, item){
            build_skills = build_skills + "<li>"+row_data.skills[i]+"<li>";
        });
    }
    else {
        build_skills = "<li>No Skills Specified.<li>"
    }

    if (row_data.categories.length>0) {
        $.each(row_data.categories, function(i, item){
            build_categories = build_categories + "<li>"+item+"<li>";
        });
    }
    else {
        build_categories = "<li>N/A<li>"
    }

    /**
     * RFT Files.
     */
    if (row_data.files.length>0) {
        $.each(row_data.files, function(i, item){
        	if (i > 0) {
        		build_files_rft = build_files_rft + " | ";
            }
        	build_files_rft = build_files_rft + $.nano("<a href=\"{url}\" target=\"__blank\">{name}</a>", item)
        });
    } else {
    	build_files_rft = "No Files Attached."
    }

    /**
     * Tender Files.
     */
    if (row_data.proposal_files.length>0) {
        $.each(row_data.proposal_files, function(i, item){
            build_files_tender = build_files_tender + $.nano('<li id="upload-' + item.id + '"><span class="title">'+item.name+'</span><span class="invisible-delimeter"></span><span class="description">'+item.type+'</span><span class="invisible-delimeter"></span></li>', item)
            if (i > 0) {
            	build_files_proposal = build_files_proposal + " | ";
            }
            build_files_proposal = build_files_proposal + $.nano("<a href=\"{url}\" target=\"__blank\">{name}</a>", item);
        });
    } else {
    	build_files_tender = "";
    	build_files_proposal = "No Files Attached.";
    }

    tender_details = $.nano("\
        <div class=\"original-tender\">\
            <h2>Description</h2>\
            <div class=\"pre\">{details}</div>\
            <h2>Attached Files</h2>\
            	" + build_files_rft + "\
			<h2>Tendering Started</h2>\
			<p>{start_date}</p>\
			<h2>Tendering Finishes</h2>\
			<p>{submission_deadline}</p>\
			<h2>Project Delivery Deadline</h2>\
			<p>{end_date}</p>\
        	<h2>Categories</h2>\
        	<ul>\
            	"+build_categories+"\
            </ul>\
            <h2>Desired Skills</h2>\
            <ul>\
                "+build_skills+"\
            </ul>\
            <h2>Preferred Job Location</h2>\
            <p>{location}</p>\
            <h2>Rights Of Use</h2>\
            <p>{rights}</p>\
        </div>", row_data);
    //alert(row_data.existing);
    if ("public" == row_data.user_type) {
    	tender_details +=
			$.nano(
			"<div class=\"edited-tender\">\
	            <h2>Sign-up or Log In to Tender</h2>\
	            <p>To tender for this project simply <a href=\"/sign-up/supplier\" title=\"Sign Up\">sign up</a>, or <a href=\"/login\" title=\"Log In\">log in</a>.</p>\
	            <p><br /><a href=\"/sign-up/supplier\" class=\"button\" id=\"button-signup\"><span></span>Supplier Sign-Up</a></p>\
	            <br />\
	         </div>\
	         <div class=\"clear\">\
	         </div>\
	    </div>",
	    row_data);
    } else if (row_data.existing || (row_data.remaining_tenders > 0)) {
		tender_details += $.nano("<div class=\"edited-tender\">\
	            <form method=\"post\" action=\"/projects/"+rowid+"/tenders/review\">\
	            <input type=\"hidden\" name=\"tender_id\" value=\""+row_data.tender_id+"\" class=\"tender_id\" />\
	            <h2>Submit Your Proposal</h2>\
	            <textarea class=\"textarea-proposal-details\" name=\"text\" cols=\"30\" rows=\"10\">{proposal_details}</textarea>\
	            <div class=\"vertical-margined-container\">\
	        		<div id=\"uploader-"+rowid+"\" class=\"uploader\">\
	        			<input type=\"hidden\" name=\"upload_session\" value=\"upload_"+Math.floor(Math.random()*9999999)+"\" class=\"upload-session\" />\
	        			<a value=\"Delete\" id=\"button-upload-"+rowid+"\" class=\"button-upload left thin margin-right\"><span></span>Add File</a>\
	        			<div class=\"clear\"><br /></div>\
	        			<div id=\"upload-loading-"+rowid+"\" class=\"hidden upload-loading\"><img src=\"/media/images/ajax-loader.gif\" title=\"Loading...\" /></div>\
	        			<div id=\"uploaded-files-container"+rowid+"\" class=\""+((row_data.proposal_files.length>0)?(""):("hidden"))+" uploaded-files-container\">\
	        				<h2>Attached Files</h2>\
	        				<ul id=\"uploaded-files-"+rowid+"\" class=\"detail-list no-pre-wrap uploaded-files-list\">\
	        						"+build_files_tender+"\
	        				</ul>\
	        			</div>\
	        		</div>\
	                <div class=\"clear\"></div>\
	            </div>\
	            <div class=\"vertical-margined-container add-milestone-container\">\
	                <h2>Add Milestones</h2>\
	                <p class=\"vertical-margined-container\"><input type=\"text\" value=\"Title\" class=\"input-milestone-title\" /></p>\
	                <p class=\"vertical-margined-container\"><textarea class=\"textarea-milestone-description\" class=\"textarea-milestone-description\" cols=\"30\" rows=\"10\">Description</textarea></p>\
	                <p class=\"vertical-margined-container\">\
	                    <input type=\"text\" value=\"Time (in days)\" name=\"input-milestone-time\" class=\"input-milestone-time\" />\
	                    <input type=\"text\" value=\"Cost (in dollars)\" name=\"input-milestone-cost\" class=\"input-milestone-cost\"  />\
	                    <input type=\"hidden\" value=\"\" name=\"input-milestone-id\" class=\"input-milestone-id\"  />\
	                    <input type=\"hidden\" value=\"0\" name=\"input-milestone-position\" class=\"input-milestone-position\"  />\
	                </p>\
	                <div class=\"clear\"></div>\
	                <div class=\"vertical-margined-container\">\
	            	    <a href=\"#\" class=\"button button-add-milestone\"><span></span>Add</a>\
	            	</div>\
	        	</div>\
	            <div class=\"edited-milestones\">\
	                    "+build_milestones+"\
	                    <div class=\"milestone-total-time\">Total Time: <span class=\"amount\">"+total_time+" Days</span></div>\
	                    <div class=\"milestone-total-cost\">Total Cost: <span class=\"amount\">$"+total_cost+"</span></div>\
	            </div>\
	            <div class=\"client-question\">\
	                <textarea class=\"textarea-client-question\" name=\"comment\" cols=\"30\" rows=\"10\">{proposal_comment}</textarea>\
	                <div class=\"vertical-margined-container\">\
	                    <button value=\"Review Tender\" type=\"submit\" class=\"button\"><span></span>Review Tender</button>\
	            	</div>\
	            </div>\
	            </form>\
	        </div>\
	        <div class=\"clear\">\
	        </div>\
	    </div>",
	    row_data);
	} else {
		tender_details +=
			$.nano(
			"<div class=\"edited-tender\">\
	            <h2>No Tender Credits</h2>\
	            <p>Sorry, you cannot submit any more tenders this month. Please <a href=\"/account/membership\" title=\"Upgrade Membership Plan\">upgrade your plan</a>, allowing you to submit more tenders per month.</p>\
	            <br />\
	         </div>\
	         <div class=\"clear\">\
	         </div>\
	    </div>",
	    row_data);
	}


    profile = $.nano("\
        <div id=\"tender-details\"> \
            <h2>Tender Details</h2> \
            <p>{proposal_details}</p> \
        </div> \
        \
        <div id=\"tender-detail-files\"> \
            <h2>Attached Files</h2> \
            "+build_files_proposal+" \
        </div> \
        <div class=\"clear\"></div> \
        <table class=\"detail-table\" id=\"tender-bid-table\"> \
            <tr> \
                <th>Milestone</th> \
                <th>Description</th> \
                <th>Time</th> \
                <th>Cost</th> \
            </tr> \
            "+build_table+" \
            <tr class=\"total-row\"> \
                <td colspan=\"2\" align=\"right\">Total</td> \
                <td>"+total_time+" days</td> \
                <td>$"+total_cost+"</td> \
            </tr> \
            </table>",
        row_data);

    	if (row_data.accepted_purchaser) {
    		profile += "<a href=\"/projects/"+rowid+"/accept\" class=\"button right\" id=\"button-award-tender\"><span></span>Start Project</a>\
            <div class=\"clear\"></div>";
    	}

        if (row_data.featured == true) {
            $("tr#"+tr_id+" td:first-child").addClass("featured");
        }

        content = profile;
        $("tr#"+tr_id).attr("supplier_id", tr_id);
        $("tr#"+tr_id).attr("tender_id", row_data.tender_id);
        $("tr#"+tr_id).attr("supplier_id", row_data.supplier_id);

        $("tr#"+tr_id).after("<tr class=\"slidedown\"><td colspan=\"6\"><div class=\""+((row_data.selected && "public" != row_data.user_type && "existing" == row_data.expand)?(""):("hidden"))+" view-details\">"+content+"</div></td></tr>\
        <tr class=\"slidedown\"><td colspan=\"6\"><div class=\""+((row_data.selected && ("public" == row_data.user_type || "edit" == row_data.expand))?(""):("hidden"))+" view-tender-details\">"+tender_details+"</div></td></tr>\
        <tr class=\"slidedown\" id=\"messages-"+tr_id+"\"><td colspan=\"6\"><div class=\"hidden view-messages\">Loading Messages</div></td></tr>");
        //Re-init uploaders, to kick-start the newly added upload forms
        if (typeof window.initUploaders == "function") {
        	initUploaders();
        }
        //Make sure we scroll nicely to the selected RFT
        if (row_data.selected) {
    		$("tr#"+tr_id).addClass("selected-project");
    		$('html, body').animate({scrollTop: $(".selected-project:first").offset().top}, 700);
    	}
}

function user_formatter (cellvalue, options, rowObject)
{
	//$(rowObject).attr("supplier_id")
	return "<a href=\"/\" class=\"supplier-link\">"+cellvalue+"</a>";
};

function supplier_formatter (cellvalue, options, rowObject)
{
	//$(rowObject).attr("supplier_id")
	return "<a href=\"/suppliers\" class=\"supplier-link\">"+cellvalue+"</a>";
};

function project_title_formatter (cellvalue, options, rowObject)
{
	return "<a href=\"#\" class=\"project-title-link\">"+cellvalue+"</a>";
};

function rating_formatter (cellvalue, options, rowObject)
{
	if ( parseInt(cellvalue) >= 0 && parseInt(cellvalue) <= 5) {
		return "<span class=\"star-rating rate-"+cellvalue+"\">"+cellvalue + '/5'+"</span>";
	}
	return 'Rating n/a';
};

function day_formatter (cellvalue, options, rowObject)
{
	if ( parseInt(cellvalue) ) {
		return cellvalue + ' Days';
	}
	return 'Duration n/a';
};

function tenders_init () {

		$("#action-view a").click( function() {
			$(".view-messages, .view-profile").slideUp();
			var view_details_div = $(this).parent().parent().parent().parent().next().children().children();
		    $(view_details_div).slideToggle();

		    var supplier_id = $(this).parents(".ui-row-ltr").attr("supplier_id");
		    $.getJSON("/suppliers/" + supplier_id, { id: supplier_id, format: "JSON"}, function(data) {
		    	$.each(data.portfolio, function(i, item){
                    $.each(item.image_ids, function(i, image){
                    	$(view_details_div).find('.carousel .wrapper:first ul').append(portfolioThumbnail(image));
                    });
                });

                $(".profile-carousel").infiniteCarousel();

                $(".carousel-toggle").click(function() {
                	var sect_id =  $(this).attr("id").substring(9);
                	$(".profile-carousel").slideUp();
                	$("#car-"+sect_id).slideDown();
                	return false;
                });

                $(".portfolio-toggle").click(function() {
                	var sect_id =  $(this).attr("id").substring(15);
          			$("#car-"+sect_id+"-0").show();

          			$("#overview-"+sect_id).slideUp();
          			$("#historyandfeedback-"+sect_id).slideUp();
          			$("#portfolio-"+sect_id).slideDown();
          		 	return false;
      		  	});

                $("#carousel2-chosen li a").click(function() {
                	var image_src = $(this).attr("href");
                	var image_elem = $("#carousel-chosen-video");
                	var image_id   = $(this).attr("image-id");

                	//@todo: Add video playing here also.
                	if ($(this).is('.attach-image')) {
                		image_elem.hide();
						var img = $('<img />');
                		img.attr("src", "/files/" + image_id + "/width/750/" + image_id + ".png");
						image_elem.html(img);
                		image_elem.show();

					} else if ($(this).is('.attach-video')) {

			 			image_elem.html('<a class="video" id="' + image_id + '-player" href="' + image_src + '" style="clear: both; display: block; margin: 15px auto 0 auto; width: 785px; height: 442px"></a>');
			 			image_elem.show();
			 			flowplayer(image_id + '-player', "/media/swf/flowplayer-3.1.5.swf", {clip: {autoPlay: false, autoBuffering: true, scaling: "orig"}});
                	} else {
                		return true;
                	}

                	$("#carousel-chosen-video").slideDown();
                	return false;
        		});

                $(".carousel ul li a").click(function() {
                	var image_src = $(this).attr("href");
                	var image_elem = $("#carousel-chosen-image-" + supplier_id + " img");
                	var image_id   = $(this).attr("id").substring("portfolio-image-".length);

                	if ($(this).is('.portfolio-image')) {
                		image_elem.fadeOut();
                		image_elem.attr("src", "/files/" + image_id + "/width/750/" + image_id + ".png");
                		image_elem.fadeIn();
					} else if ($(this).is('.portfolio-video')) {
						image_elem.html('<a class="video" id="'+image_id+'-player" href="'+image_src+'" style="clear: both; display: block; margin-15px auto 0 auto; width: 785px; height: 442px;"></a>');
						image_elem.show();
			 			flowplayer(image_id + '-player', "/media/swf/flowplayer-3.1.5.swf", {clip: {autoPlay: false, autoBuffering: true, scaling: "orig"}});
                	} else {
                		return true;
                	}

                	$("#carousel-chosen-image-" + supplier_id).slideDown();
                	return false;
        		});
		    });

			return false;
		});

		$("#action-profile a, a.supplier-link").click(function() {
		    $(".view-messages, .view-portfolio").slideUp();
			var supplier_id = $(this).parents(".ui-row-ltr").attr("supplier_id");//$(this).parents(".ui-row-ltr").attr("id");
			var profile_container = $(this).parents(".ui-row-ltr").next().next().children().children();

			if (profile_container.css("display")=="block") {
			    profile_container.slideToggle();
    			return false;
			}

			var overview_template = "\
			<a href=\"#\" class=\"overview-toggle button left thin margin-right\" id=\"overview-link-"+supplier_id+"\"><span></span>Overview</a> <a href=\"#\" class=\"historyandfeedback-toggle button left thin margin-right\" style=\"width: 16em\" id=\"historyandfeedback-link-"+supplier_id+"\"><span></span>History and Feedback</a>\ <a href=\"#\" class=\"portfolio-toggle button left thin margin-right\" id=\"portfolio-link-"+supplier_id+"\"><span></span>Portfolio</a>\
			<div class=\"clear\"></div>\
			<div id=\"overview-{id}\" class=\"overview-section clear\">\
			<ul class=\"detail-list left\">\
            	<li><span class=\"title\">Name</span><span class=\"invisible-delimiter\"> - </span><div class=\"description\"><p>{supplier_name}</p></div></li>\
            	<li><span class=\"title\">Location</span><span class=\"invisible-delimiter\"> - </span><div class=\"description\"><p>{location}</p></div></li>\
            	<li><span class=\"title\">Profile</span><span class=\"invisible-delimiter\"> - </span><div class=\"description\"><pre>{profile}</pre></div></li>\
            	<li class=\"last\"><span class=\"title\">Services</span><span class=\"invisible-delimiter\"> - </span><div class=\"description\"><pre>{services}</pre></div></li>\
            </ul>\
            <img src=\"{meta.profile_image}\" class=\"right\" width=\"340\" />\
            <div class=\"clear\"></div>\
            </div>\
            ";

            var image_template = "";

			$.getJSON("/suppliers/" + supplier_id, {
			      id: supplier_id,
			      format: "JSON"
			    }, function(data) {

                    var portfolio_section = "<div id=\"portfolio-"+data.id+"\" class=\"portfolio-section clear\">";

                    profile_container.html("");
                    profile_container.append($.nano(overview_template, data));

                    $(".view-details").slideUp();


                    $.each(data.portfolio, function(i, item){
                      portfolio_section = portfolio_section + "<a href=\"#\" class=\"carousel-toggle\" id=\"carousel-"+data.id+"-"+i+"\">" + item.portfolio_name + "</a> | ";
                      image_template = image_template + "\
                      <div class=\"carousel profile-carousel\" id=\"car-"+data.id+"-"+i+"\" style=\"height:100px;\"> \
                    	      <div class=\"wrapper\"> \
                    	        <ul>";
                      $.each(item.image_ids, function(i, image){
                    	  image_template = image_template + portfolioThumbnail(image);
                      });
                      image_template = image_template + " \
                    	        </ul> \
                    	    </div> \
                    	</div>";
                  });

				  if (data.portfolio && data.portfolio[0] && data.portfolio[0].image_ids && data.portfolio[0].image_ids[0] != undefined) {
                  	image_template = image_template + "<div class=\"carousel-chosen-image\" id=\"carousel-chosen-image-"+data.id+"\"><img src=\"/files/"+data.portfolio[0].image_ids[0].id+"/width/750/"+data.portfolio[0].image_ids[0].id+".png\" /></div>";
				  }
                  portfolio_section = portfolio_section + "</div>";

                  var build_reviews = "";
                  if (data.meta.history.reviews.length > 0) {
                  	build_reviews = "<ul>";
                  	$.each(data.meta.history.reviews, function(i, item){
                		build_reviews += "<li><span class=\"star-rating rate-{rating}\">" + item.score + "/5</span><br>\""+item.comment+"\" &mdash " + item.person_name +"</li>";
                      });
                  	build_reviews += "</ul>";
                  }

                  var historyandfeedback_template = "\
                  	<div id=\"historyandfeedback-"+data.id+"\" class=\"historyandfeedback-section clear\">\
                  		<ul class=\"detail-list left\">\
                      		<li><span class=\"title\">Overall Rating</span><span class=\"invisible-delimiter\"> - </span><div class=\"description\"><p><span class=\"star-rating rate-{rating}\">{rating}/5</span> ({ratings_count} reviews)</p></div></li>\
                      		<li><span class=\"title\">Total Projects</span><span class=\"invisible-delimiter\"> - </span><div class=\"description\"><p>{projects_count}</p></div></li>\
                      		<li><span class=\"title\">Repeat Customers</span><span class=\"invisible-delimiter\"> - </span><div class=\"description\"><p>{repeats_count} of {customers_count}</p></div></li>\
                      		<li><span class=\"title\">Joined</span><span class=\"invisible-delimiter\"> - </span><div class=\"description\"><p>{join_date}</p></div></li>\
                      		<li class=\"last\"><span class=\"title\">Reviews</span><span class=\"invisible-delimiter\"> - </span><div class=\"description\">"+build_reviews+"</div></li>\
                      	</ul>\
                      	<div class=\"clear\"></div>\
                      </div>";
                  var historyandfeedback_section = $.nano(historyandfeedback_template, data.meta.history);

                  var portfolio_container =  $(portfolio_section).appendTo(profile_container);
                  $(image_template).appendTo(portfolio_container);

                  $(historyandfeedback_section).appendTo(profile_container);
                  //profile_container.append(image_template);

                  $(".profile-carousel").infiniteCarousel();

                  profile_container.slideToggle();

                  $(".carousel-toggle").click(function() {
              			var sect_id =  $(this).attr("id").substring(9);
              			$(".profile-carousel").slideUp();
              			$("#car-"+sect_id).slideDown();
              		 	return false;
          		  });

          		  $(".portfolio-toggle").click(function() {
            			var sect_id =  $(this).attr("id").substring(15);
            			$("#car-"+sect_id+"-0").show();

            			$("#overview-"+sect_id).slideUp();
            			$("#historyandfeedback-"+sect_id).slideUp();
            			$("#portfolio-"+sect_id).slideDown();
            		 	return false;
        		  });

        		  $(".overview-toggle").click(function() {
              			var sect_id =  $(this).attr("id").substring(14);
              			$("#portfolio-"+sect_id).slideUp();
              			$("#historyandfeedback-"+sect_id).slideUp();
              			$("#overview-"+sect_id).slideDown();
              		 	return false;
          		  });

        		  $(".historyandfeedback-toggle").click(function() {
        		         var sect_id =  $(this).attr("id").substring(24);
        		         $("#portfolio-"+sect_id).slideUp();
        		         $("#overview-"+sect_id).slideUp();
        		         $("#historyandfeedback-"+sect_id).slideDown();
        		         return false;
        		  });

          		  $(".profile-carousel ul li a").click(function() {
          			var image_src = $(this).attr("href");
                    var image_elem = $("#carousel-chosen-image-" + data.id);
                    var image_id   = $(this).attr("id").substring("portfolio-image-".length);

                    if ($(this).is('.portfolio-image')) {
                    	image_elem.fadeOut();
						var img = $('<img />');
                        img.attr("src", "/files/" + image_id + "/width/750/" + image_id + ".png");
						image_elem.html(img);
                        image_elem.fadeIn();
					} else if ($(this).is('.portfolio-video')) {
						image_elem.html('<a class="video" id="'+image_id+'-player" href="'+image_src+'" style="clear: both; display: block; margin-15px auto 0 auto; width: 785px; height: 442px;"></a>');
						image_elem.show();
			 			flowplayer(image_id + '-player', "/media/swf/flowplayer-3.1.5.swf", {clip: {autoPlay: false, autoBuffering: true, scaling: "orig"}});
                    } else {
                    	return true;
                    }

                    $("#carousel-chosen-image-" + data.id).slideDown();
          			return false;
          		});

			    });

			return false;
		});


		$("#action-message a").click(function() {
		    $(".view-portfolio, .view-details, .view-profile").slideUp();
			var supplier_id = $(this).parents(".ui-row-ltr").attr("supplier_id");//$(this).parents(".ui-row-ltr").attr("id");
			var tender_id   = $(this).parents(".ui-row-ltr").attr("id");
			var message_container = $(this).parents(".ui-row-ltr").next().next().next().children().children()

			var message_template = "\
                <li class=\"tender-message\">\
                <ul class=\"message-meta\">\
                    <li class=\"actor\">{from}</li>\
                    <li class=\"date\">{date}</li>\
                    <li class=\"time\">{time}</li>\
                </ul>\
                <p class=\"message-text pre\">{content}</p>\
                </li>\
            ";


			$.getJSON("/tenders/"+tender_id+"/comments", {
			      id: tender_id,
			      format: "JSON"
			    }, function(data) {

			        message_container.html(
			        "<form action=\"\" method=\"post\" class=\"add-message-form\">\
			        <p class=\"form-buttons-right\"><textarea id=\"message-box\" name=\"text\" cols=\"30\" rows=\"10\"></textarea></p>\
			        <p class=\"form-buttons-right\"><button type=\"submit\" value=\"Add Message\" class=\"button\" id=\"button-add-message\"><span></span>Add Message</button></p>\
			        </form>");

			        $("<h2>Messages</h2>").appendTo(message_container);

                    var ul_container = $("<ul class=\"tender-messages\"></ul>").appendTo(message_container);
                    $('<div class=\"clear\"></div>').appendTo(message_container);
			        $.each(data.messages, function(i, item){
			            $($.nano(message_template, item)).appendTo(ul_container);
			        });

			        $(".add-message-form").submit(function(){
                        	var post_vars = message_container.find("form").serializeForm();

                        	console.log(post_vars)

                        	// Adjust URL Below
                        	$.post("/tenders/"+tender_id+"/comments/add", post_vars, function(data){

                                if (data.success == true) {

                                    var message_template = $.nano("\
                                    <li class=\"tender-message\">\
                                    <ul class=\"message-meta\">\
                                        <li class=\"actor\">{from}</li>\
                                        <li class=\"date\">{date}</li>\
                                        <li class=\"time\">{time}</li>\
                                    </ul>\
                                    <p class=\"message-text pre\">{comment}</p>\
                                    </li>", data)
                                    var added_message = ul_container.prepend(message_template);
                                    added_message.children("li").eq(0).hide().slideDown();

                                    var notify_text = "Comment Successfully Added";
                                    var notify_type = "success";
                                }
                                else {
                                    var notify_text = data.fail_text;
                                    var notify_type = "error";
                                }

                                $.notifyBar({
                                    html: notify_text,
                                    notifyType: notify_type,
                                    delay: 2000,
                                    animationSpeed: "normal"
                                  });

                        	}, "json");

                        	return false;
                        });

                    message_container.slideToggle();
			    });

			return false;
		});

		$("#action-shortlist a").click(function() {
		    $(this).parent().toggleClass("shortlisted");

		    // AJAX request needs to be un-commented during integration with the backend
		    var shortlisted = false;
		    if ( $(this).parent().is(".shortlisted") ) {
		    	shortlisted = true;
			}

            $.post("/projects/"+current_project_id+"/tenders/"+$(this).parent().parent().parent().parent().attr('id')+"/shortlist-toggle", {},
            	function(data){

            		var notify_text = "Tender has been <strong>shortlisted</strong>";
            		if ( !shortlisted ) {
            			notify_text = "Tender has been <strong>removed from the shortlist</strong>";
            		}

	    			$.notifyBar({
	    			    html: notify_text,
	    			    delay: 2000,
	    			    animationSpeed: "normal"
	    			});
            	},
            "json");

			return false;
		});

		$("#action-delete a, #button-delete-tender").click(function() {

		    // AJAX request needs to be un-commented during integration with the backend
			$.post("/projects/"+current_project_id+"/tenders/"+$(this).parent().parent().parent().parent().attr('id')+"/delete-toggle", {},
             function(data){

			$.notifyBar({
			    html: "Tender has been <strong>deleted</strong>",
			    delay: 2000,
			    animationSpeed: "normal"
			  });

		     }, "json");

			return false;
		});

		$(".carousel").infiniteCarousel();
		//$('.carousel ul li a').colorbox();

		$(".carousel ul li a").click(function() {
			var image_src = $(this).attr("href");
			var image_elem = $(this).parent().parent().parent().parent().next().children("img");

			//@todo: Add video and selective redirection.
            image_elem.fadeOut();
            image_elem.attr("src", image_src);
            image_elem.fadeIn();

			$(this).parent().parent().parent().parent().next().slideDown();
			return false;
		});
};

function directory_init() {

    $("#profiles a").click(function() {
		$("#view_input").val("profiles");
		$("#search-form").submit();
		return false;
	});

    $("#images a").click(function() {
		$("#view_input").val("images");
		$("#search-form").submit();
		return false;
	});

    $(".favourite a").click(function() {

        var supplier_id = $(this).attr("id").substring(8);

        var favourite  = ($(this).is(".on")) ? ("false") : ("true");

        var notify_text ="Supplier has been <strong>removed from favourites</strong>";

        var link_text = "<img src='/media/images/directory-icon-favourite.png'>";

        if (favourite == "true") {
            notify_text = "Supplier has been <strong>added to favourites</strong>";

	        link_text = "<img src='/media/images/directory-icon-favourited.png'>";
        }

        $(this).toggleClass("on");

        $(this).html(link_text);

     	$.post("/suppliers/" + supplier_id + "/favourite/" + favourite, {supplier_id: supplier_id}, function(data){

        	$.notifyBar({
        		html: notify_text,
        		delay: 2000,
        		animationSpeed: "normal"
        	});

        }, "json");

        return false;
    });

    $(".search-bar select").change(function () {
		$("#search-form").submit();
    });

}

function suppliers_init () {

     $("a.supplier-link").click(function() {
         $(this).parent().parent().next().children().children().slideToggle();

         return false;
     });

     $("#action-favourite a").click(function() {
         $(this).parent().toggleClass("favourited");

         var supplier_id = $(this).parent().parent().parent().parent().attr("id");
     	 var favourited  = ($(this).parent().is(".favourited"))?("true"):("false");

     	 $.post("/suppliers/" + supplier_id + "/favourite/" + favourited, {supplier_id: supplier_id},
         function(data){
        	 var notify_text ="Supplier has been <strong>removed from favourites</strong>";
        	 if ( favourited == "true" ) {
        		 notify_text = "Supplier has been <strong>added to favourites</strong>";
        	 }

        	 $.notifyBar({
        		 html: notify_text,
        		 delay: 2000,
        		 animationSpeed: "normal"
        	 });

         }, "json");

         return false;
     });

     $(".carousel-toggle").click(function() {
 		var sect_id =  $(this).attr("id").substring(9);
 		$(".profile-carousel").slideUp();
 		$("#car-"+sect_id).slideDown();
 	 	return false;
     });

     $(".portfolio-toggle").click(function() {
         var sect_id =  $(this).attr("id").substring(15);
         $(".profile-carousel").hide();
         $("#car-"+sect_id+"-0").show();

         $("#overview-"+sect_id).slideUp();
         $("#historyandfeedback-"+sect_id).slideUp();
         $("#portfolio-"+sect_id).slideDown();
         return false;
     });

     $(".overview-toggle").click(function() {
         var sect_id =  $(this).attr("id").substring(14);
         $("#portfolio-"+sect_id).slideUp();
         $("#historyandfeedback-"+sect_id).slideUp();
         $("#overview-"+sect_id).slideDown();
         return false;
     });

     $(".historyandfeedback-toggle").click(function() {
         var sect_id =  $(this).attr("id").substring(24);
         $("#portfolio-"+sect_id).slideUp();
         $("#overview-"+sect_id).slideUp();
         $("#historyandfeedback-"+sect_id).slideDown();
         return false;
     });

     $(".carousel").infiniteCarousel();


     /**
      * I have genericised this code to display
      * the full image, the video player
      * or to proceed to file download.
      * --David Doran, 25th Feb.
      */
     $(".profile-carousel ul li a").click(function() {
         var sect_id     = $(this).parent().parent().parent().parent().parent().attr("id").substring(10);
         var image_src   = $(this).attr("href");
		 var image_id    = $(this).attr("id").substring("portfolio-image-".length);
		 var chosen_elem = $("#carousel-chosen-image-" + sect_id);

		 if ($(this).is('.portfolio-image')) {
			 $(chosen_elem).fadeOut();
	         $(chosen_elem).html($('<img />').attr("src", "/files/" + image_id + "/width/750/" + image_id + ".png"));
	         $(chosen_elem).fadeIn();
	         $("#carousel-chosen-image-" + sect_id).slideDown();
		 } else if ($(this).is('.portfolio-video')) {
			 $(chosen_elem).html('<a class="video" id="' + $(this).attr("id") + '-player" href="' + image_src + '" style="clear: both; display: block; margin: 15px auto 0 auto; width: 785px; height: 442px"></a>');
			 $(chosen_elem).show();
			 flowplayer($(this).attr("id") + '-player', "/media/swf/flowplayer-3.1.5.swf", {clip: {autoPlay: false, autoBuffering: true, scaling: "orig"}});
		 } else {
			 //Allow the link to continue, to file download.
			 return true;
		 }

         return false;
     });
};

function edit_milestone (event) {
        var milestone_data    = new Array();
        var current_milestone = $(this).parent().parent();
        var add_milestone     = current_milestone.parent().parent().find(".add-milestone-container");
        var edited_milestones = add_milestone.parent();

        milestone_data['title'] 	= current_milestone.find("h3").text().slice(0,-4);
		milestone_data['desc'] 		= current_milestone.find("p").text();
		milestone_data['time'] 		= current_milestone.find(".milestone-time>span.amount").text().slice(0,-5);
		milestone_data['cost'] 		= current_milestone.find(".milestone-cost>span.amount").text().slice(1);
		milestone_data['id'] 		= current_milestone.find(".milestone-id").text();
		milestone_data['position']  = edited_milestones.find('.individual-milestone').index(current_milestone);

		add_milestone.find(".input-milestone-title").val(milestone_data['title']);
		add_milestone.find(".textarea-milestone-description").val(milestone_data['desc']);
		add_milestone.find(".input-milestone-time").val(milestone_data['time']);
		add_milestone.find(".input-milestone-cost").val(milestone_data['cost']);
		add_milestone.find(".input-milestone-id").val(milestone_data['id']);
		add_milestone.find(".input-milestone-position").val(milestone_data['position']);

		add_milestone.find(".button-add-milestone").html("<span></span>Update");

		current_milestone.remove();

		var total_time = 0, total_cost = 0;

        $.each(add_milestone.parents(".edited-tender").find(".milestone-time > .amount"), function(i, item){
          total_time = total_time + parseFloat($(item).text());
        });
        $.each(add_milestone.parents(".edited-tender").find(".milestone-cost > .amount"), function(i, item){
          total_cost = total_cost + parseFloat($(item).text().substring(1));
        });

        add_milestone.parents(".edited-tender").find(".milestone-total-time > .amount").text(total_time+" Days");
        add_milestone.parents(".edited-tender").find(".milestone-total-cost > .amount").html("$"+total_cost);

        $('html, body').animate({scrollTop: add_milestone.find(".input-milestone-title:first").offset().top}, 700);

		//add_milestone.slideDown();

		return false;
}


function suppliers_tenders_init () {

 	$("#action-view a").click( function() {
		$(".view-messages, .view-tender-details").slideUp();
	    $(this).parent().parent().parent().parent().next().children().children().slideToggle();
		return false;
	});

	$("#simple-tenders-list tr.ui-widget-content").click( function() {
	    $(this).next().next().children().children().slideToggle();
		return false;
	});

	$("#action-edit a").click( function() {
		$(".view-messages, .view-details").slideUp();
	    $(this).parent().parent().parent().parent().next().next().children().children().slideToggle();
		return false;
	});

	$("#action-message a").click(function() {
	    $(".view-details, .view-tender-details").slideUp();
		var project_id  = $(this).parents(".ui-row-ltr").attr("id");
	    var supplier_id = $(this).parents(".ui-row-ltr").attr("supplier_id");//$(this).parents(".ui-row-ltr").attr("id");
	    var tender_id = $(this).parents(".ui-row-ltr").attr("tender_id");
		var message_container = $(this).parents(".ui-row-ltr").next().next().next().children().children();

		var message_template = "\
            <li class=\"tender-message\">\
            <ul class=\"message-meta\">\
                <li class=\"actor\">{from}</li>\
                <li class=\"date\">{date}</li>\
                <li class=\"time\">{time}</li>\
            </ul>\
            <p class=\"message-text pre\">{content}</p>\
            </li>\
        ";

		$.getJSON("/tenders/"+tender_id+"/comments", {
		      id: tender_id
		    }, function(data) {

		        message_container.html("");
		        // TODO: Form action below
                $("\
                    <h2>Messages</h2><form action=\"\" class=\"add-message-form\" method=\"post\">\
            	        <p class=\"form-buttons-right\"><textarea id=\"message-box\" name=\"text\" cols=\"30\" rows=\"10\"></textarea></p>\
            	        <p class=\"form-buttons-right\"><button type=\"submit\" value=\"Add Message\" class=\"button\" id=\"button-add-message\"><span></span>Add Message</button></p>\
                	</form>\
                ").appendTo(message_container);

                var ul_container = $("<ul class=\"tender-messages\"></ul>").appendTo(message_container);
                $("<div class=\"clear\"></div>").appendTo(message_container);

		        $.each(data.messages, function(i, item){
		            $($.nano(message_template, item)).appendTo(ul_container);
		        });

		        $(".add-message-form").submit(function(){
                    	var post_vars = message_container.find("form").serializeForm();


                    	console.log(post_vars)

                    	// Adjust URL Below
                    	$.post("/tenders/"+tender_id+"/comments/add", post_vars, function(data){

                            if (data.success == true) {
                                var message_template = $.nano("\
                                <li class=\"tender-message\">\
                                <ul class=\"message-meta\">\
                                    <li class=\"actor\">{from}</li>\
                                    <li class=\"date\">{date}</li>\
                                    <li class=\"time\">{time}</li>\
                                </ul>\
                                <p class=\"message-text pre\">{comment}</p>\
                                </li>", data)
                                var added_message = ul_container.prepend(message_template);
                                added_message.children("li").eq(0).hide().slideDown();

                                var notify_text = "Comment Successfully Added";
                                var notify_type = "success";
                            }
                            else {
                                var notify_text = data.fail_text;
                                var notify_type = "error";
                            }

                            $.notifyBar({
                                html: notify_text,
                                notifyType: notify_type,
                                delay: 2000,
                                animationSpeed: "normal"
                              });

                    	}, "json");

                    	return false;
                    });


                message_container.slideToggle();
		    });

		return false;
	});

    $(".textarea-proposal-details").focus(function () {
        if(this.value == 'Proposal Details') {this.value = '';}}
    );
    $(".textarea-proposal-details").blur(function () {
        if (this.value == '') {this.value = 'Proposal Details';}}
    );

    $(".input-milestone-title").focus(function () {
        if(this.value == 'Title') {this.value = '';}}
    );
    $(".input-milestone-title").blur(function () {
        if (this.value == '') {this.value = 'Title';}}
    );

    $(".textarea-milestone-description").focus(function () {
        if(this.value == 'Description') {this.value = '';}}
    );
    $(".textarea-milestone-description").blur(function () {
        if (this.value == '') {this.value = 'Description';}}
    );

    $(".input-milestone-time").focus(function () {
        if(this.value == 'Time (in days)') {this.value = '';}}
    );
    $(".input-milestone-time").blur(function () {
        if (this.value == '') {this.value = 'Time (in days)';}}
    );

    $(".input-milestone-cost").focus(function () {
        if(this.value == 'Cost (in dollars)') {this.value = '';}}
    );
    $(".input-milestone-cost").blur(function () {
        if (this.value == '') {this.value = 'Cost (in dollars)';}}
    );

    $(".textarea-client-question").focus(function () {
        if(this.value == 'Ask the client a question') {this.value = '';}}
    );
    $(".textarea-client-question").blur(function () {
        if (this.value == '') {this.value = 'Ask the client a question';}}
    );

    $("a.edit-link").click(edit_milestone);

	$(".button-add-milestone").click(function() {
		var add_milestone = $(this).parents(".add-milestone-container");
		var milestone_data = new Array();
		var milestone_error = false;

		milestone_data['title'] 	= add_milestone.find(".input-milestone-title").val();
		milestone_data['desc'] 		= add_milestone.find(".textarea-milestone-description").val();
		milestone_data['time'] 		= add_milestone.find(".input-milestone-time").val();
		milestone_data['cost'] 		= add_milestone.find(".input-milestone-cost").val();
		milestone_data['id'] 		= add_milestone.find(".input-milestone-id").val();
		milestone_data['position'] 	= add_milestone.find(".input-milestone-position").val();

		numMilestones = $(this).parents(".edited-tender").find(".individual-milestone").length;

		//If existing milestone then $_GET array key is the position,
		//otherwise we've to add a new one
		if (milestone_data['id']) {
			milestone_data['num'] = milestone_data['position'];
		} else {
			milestone_data['num'] = numMilestones;
		}

		var milestone_container = $.nano("\
		<div class=\"individual-milestone\">\
	        <h3>{title}<a href=\"#\" class=\"edit-link\">edit</a></h3>\
	        <p class=\"pre\">{desc}</p>\
	        <div class=\"milestone-time\">Time: <span class=\"amount\">{time} Days</span></div>\
	        <div class=\"milestone-cost\">Cost: <span class=\"amount\">${cost}</span></div>\
	        <div class=\"hidden milestone-id\">{id}</div>\
	        <input type=\"hidden\" name=\"milestones[{num}][title]\" value=\"{title}\" />\
	        <input type=\"hidden\" name=\"milestones[{num}][description]\" value=\"{desc}\" />\
	        <input type=\"hidden\" name=\"milestones[{num}][time]\" value=\"{time}\" />\
	        <input type=\"hidden\" name=\"milestones[{num}][cost]\" value=\"{cost}\" />\
	        <input type=\"hidden\" name=\"milestones[{num}][id]\" value=\"{id}\" />\
	    </div>", milestone_data)

	    if (milestone_data['id']) {
	    	var notify_text ="<strong>Milestone Edited</strong>. The client will not see your edited milestone until you submit this tender.";
	    } else {
	    	var notify_text ="<strong>Milestone Added</strong>. The client will not see your new milestone until you submit this tender.";
	    }

		if (milestone_data['title'] == "" || milestone_data['title'] == "Title") {
			notify_text ="<strong>You need to specify a milestone title</strong>.";
			milestone_error = true;
		}
		else if (milestone_data['desc'] == "" || milestone_data['desc'] == "Description") {
			notify_text ="<strong>You need to specify a milestone description</strong>.";
			milestone_error = true;
		}
		else if (isNaN(milestone_data['time'])) {
			notify_text ="<strong>Time needs to be a number value</strong>.";
			milestone_error = true;
		}
		else if (isNaN(milestone_data['cost'])) {
			notify_text ="<strong>Cost needs to be a number value</strong>.";
			milestone_error = true;
		}

		if (milestone_error == true) {
			$.notifyBar({
			    html: notify_text,
				notifyType: "error",
			    delay: 2000,
			    animationSpeed: "normal"
			});
			return false;
		}

		//$(this).parents(".edited-tender").find(".individual-milestone:last").after(milestone_container);
		/**
		 * The pre-existing code would not work when there were
		 * no existing milestones. This updated code will check
		 * for existing milestones, and if not found will add
		 * a milestone into the container (as opposed to after the last milestone).
		 * 		-- David Doran.
		 */
		lastMilestone = $(this).parents(".edited-tender").find(".individual-milestone:last");
		if (lastMilestone.length > 0) {
			//If this milestone needs to go in first place then prepend to .edited-milestones
			if (0 == milestone_data['num']) {
				$(this).parents(".edited-tender").find(".edited-milestones").prepend(milestone_container);
			} else if ($(this).parents(".edited-tender").find(".individual-milestone").length == milestone_data['num']) {
				lastMilestone.after(milestone_container);
			} else {
				$(this).parents(".edited-tender").find(".individual-milestone").eq(milestone_data['num']).before(milestone_container);
			}
		} else {
			$(this).parents(".edited-tender").find(".edited-milestones").prepend(milestone_container);
		}

		$.notifyBar({
		    html: notify_text,
		    delay: 4000,
		    animationSpeed: "normal"
		  });

		var total_time = 0, total_cost = 0;

        $.each($(this).parents(".edited-tender").find(".milestone-time > .amount"), function(i, item){
          total_time = total_time + parseFloat($(item).text());
        });
        $.each($(this).parents(".edited-tender").find(".milestone-cost > .amount"), function(i, item){
          total_cost = total_cost + parseFloat($(item).text().substring(1));
        });

        $(this).parents(".edited-tender").find(".milestone-total-time > .amount").text(total_time+" Days");
        $(this).parents(".edited-tender").find(".milestone-total-cost > .amount").html("$"+total_cost);

		add_milestone.find(".input-milestone-title").val("Title");
		add_milestone.find(".textarea-milestone-description").val("Description");
		add_milestone.find(".input-milestone-time").val("Time (in days)");
		add_milestone.find(".input-milestone-cost").val("Cost (in dollars)");
		add_milestone.find(".input-milestone-id").val("");

		$("a.edit-link").click(edit_milestone);

		//Set button label to "Add" again, in case it was "Update" previously.
		$(this).html("<span></span>Add");

		return false;
	})

    $(".edited-tender .files a").click(function() {
        return false;
    });

};

function populate_rfts_grid (type_param, sort_param) {
    $.getJSON("/projects/tender-stage/", {
    	  format: "json",
	      type: type_param,
	      sort: sort_param
	    }, function(data) {
	        $("#simple-tenders-list")[0].addJSONData(data);
	        suppliers_tenders_init();
     });
}


function populate_tenders_grid (type_param, sort_param) {
    $.getJSON("/projects/" + current_project_id + "/tenders", {
	      type: type_param,
	      sort: sort_param
	    }, function(data) {
	        $("#tender-bids-list")[0].addJSONData(data);
		      tenders_init()
     });
}

function populate_admin_grid (type_param, sort_param, view_param) {
    $.getJSON("/admin/search.json", {
	      type: type_param,
	      sort: sort_param,
	      view: view_param
	    }, function(data) {
	        $("#suppliers-list")[0].addJSONData(data);
		      suppliers_init()
     });
}


function populate_admin_grid_paging (type_param, sort_param, view_param, offset) {
	$('#paging-loading').show();
    $.getJSON("/admin/search.json", {
	      type: type_param,
	      sort: sort_param,
	      view: view_param,
		  offset: offset
	    }, function(data) {
	        $("#suppliers-list")[0].addJSONData(data);
		      suppliers_init()
			  $('#paging-loading').hide();
     });
}


function populate_suppliers_grid (type_param, sort_param, view_param) {
    $.getJSON("/suppliers/suppliers.json", {
	      type: type_param,
	      sort: sort_param,
	      view: view_param
	    }, function(data) {
	        $("#suppliers-list")[0].addJSONData(data);
		      suppliers_init()
     });
}

function populate_admin_search_grid (type_param, sort_param, view_param) {
	$.getJSON("/admin/search.json", {
		type: type_param,
		sort: sort_param,
		view: view_param
	}, function(data) {
		$('#suppliers-list')[0].addJSONData(data);
		suppliers_init();
	});
}

function search_and_populate_admin_search_grid (type_param, sort_param, view_param, search_param, category_param) {
    $.getJSON("/admin/search.json", {
	      type: type_param,
	      sort: sort_param,
	      view: view_param,
	      search: search_param,
	      category: category_param
	    }, function(data) {
	        $("#suppliers-list")[0].addJSONData(data);
		      suppliers_init()
     });
}


function search_and_populate_suppliers_grid (type_param, sort_param, view_param, search_param, category_param) {
    $.getJSON("/suppliers/suppliers.json", {
	      type: type_param,
	      sort: sort_param,
	      view: view_param,
	      search: search_param,
	      category: category_param
	    }, function(data) {
	        $("#suppliers-list")[0].addJSONData(data);
		      suppliers_init()
     });
}

function search_and_populate_supplier_side_tenders_grid (sort_param, search_param, category_param) {
    $.getJSON("/projects/tender-stage/?format=json", {
	      sort: sort_param,
	      search: search_param,
	      category: category_param
	    }, function(data) {
	        $("#simple-tenders-list")[0].addJSONData(data);
		    suppliers_tenders_init();
     });
}

function populate_supplier_side_tenders_grid (sort_param) {
    $.getJSON("/projects/tender-stage/?format=json", {
	      sort: sort_param
	    }, function(data) {
	        $("#simple-tenders-list")[0].addJSONData(data);
		    suppliers_tenders_init();
     	}
     );
}

function imageClick() {

	$(".sortable>li>div.sortable-container").removeClass("active");

	if ( $(this).parent().children("div.hidden").is(':hidden') ) {
	    $(this).addClass("active");
		$(".sortable>li>div.hidden").hide();
		$(".sortable>li").css("height","126px");

		var ind = parseInt(parseInt($(this).parent().prevAll().length) / 8);

		if ( ($(this).parent().parent().children("li").eq((ind*8)+7)).length ) {
			$(this).parent().parent().children("li").eq((ind*8)+7).css("height","570px");
		}
		else {
			$(this).parent().parent().children("li:last").css("height","570px");
		}

		$(this).parent().children("div.hidden").slideDown();
	}
	else {
		$(".sortable>li>div.hidden").hide();
		$(".sortable>li").css("height","126px");
	}

}

$.fn.infiniteCarousel = function () {
    function repeat(str, num) {
        return new Array( num + 1 ).join( str );
    }

    return this.each(function () {
        var $wrapper = $('> div.wrapper', this).css('overflow', 'hidden'),
            $slider = $wrapper.find('> ul'),
            $items = $slider.find('> li'),
            $single = $items.filter(':first'),
            singleWidth = 116,
			visible = Math.ceil(800 / singleWidth),
            currentPage = 1,
            pages = Math.ceil($items.length / visible),
            back_active = true,
            forward_active = true;


        // Set the left position to the first 'real' item
        $wrapper.scrollLeft(singleWidth * visible);

        // Paging function
        function gotoPage(page) {
            var dir = page < currentPage ? -1 : 1,
                n = Math.abs(currentPage - page),
                left = singleWidth * dir * visible * n;

            $wrapper.filter(':not(:animated)').animate({
                scrollLeft : '+=' + left
            }, 500, function () {
                if (page == 0) {
                    $wrapper.scrollLeft(singleWidth * visible * pages);
                    page = pages;
                } else if (page > pages) {
                    $wrapper.scrollLeft(singleWidth * visible);
                    // reset back to start position
                    page = 1;
                }

                currentPage = page;
            });

            return false;
        }

        $wrapper.after('<a class="arrow back">&lt;</a><a class="arrow forward">&gt;</a>');

        if ($items.length >= 7) {
            $('a.back', this).click(function () {
                if (currentPage == 1)
                    {
                        return
                    }
                return gotoPage(currentPage - 1);
            });

            $('a.forward', this).click(function () {
                if ( (currentPage) > ($items.length / (7)) )
                    {
                        return
                    }
                    return gotoPage(currentPage + 1);

            });
        }

        // create a public interface to move to a specific page
        $(this).bind('goto', function (event, page) {
            gotoPage(page);
        });
    });
};

/*
*  Notify Bar - jQuery plugin
*
*  Copyright (c) 2009 Dmitri Smirnov
*  Modified by Dave Jeffery (23/11/2009)
*
*  Licensed under the MIT license:
*  http://www.opensource.org/licenses/mit-license.php
*
*  Version: 1.1
*
*  Project home:
*  http://www.dmitri.me/blog/notify-bar
*/

/**
 *  param object
 */
$.notifyBar = function(settings)
{
  var bar = {};

  this.shown = false;

  if( !settings) {
    settings = {};
  }
  // HTML inside bar
  this.html           = settings.html || "Please try again, something went wrong";

  //How long bar will be delayed, doesn't count animation time.
  this.delay          = settings.delay || 2000;

  //How long this bar will be slided up and down
  this.animationSpeed = settings.animationSpeed || 200;

  //Use own jquery object usually DIV, or use default
  this.jqObject       = settings.jqObject;

  this.notifyType    = settings.notifyType

  var bgc = "#efefef",
  tc = "#000",
  bor = "1px solid #bbb";

  if (this.notifyType == "error") {
	bgc = "#fcc";
	tc = "#510";
	bor = "1px solid #950"
  }

  if (this.notifyType == "success") {
	bgc = "#cfc";
	tc = "#051";
	bor = "1px solid #095"
  }

  if( this.jqObject) {
    bar = this.jqObject;
    this.html = bar.html();
  } else {
    bar = $("<div></div>")
                  //basic css rules
                  .attr("id", "__notifyBar")
                  .css("width", "100%")
                  .css("position", "fixed")
                  .css("top", "0px")
                  .css("left", "0px")
                  .css("z-index", "32768")
                  //additional css rules, which you can modify as you wish.
                  .css("background-color", bgc)
                  .css("font-size", "18px")
                  .css("color", tc)
                  .css("text-align", "center")
                  // .css("font-family", "Arial, Helvetica, serif")
                  .css("padding", "10px 0px")
                  .css("border-bottom", bor);
  }

  bar.html(this.html).hide();
  var id =  bar.attr("id");
  switch (this.animationSpeed) {
    case "slow":
      asTime = 600;
      break;
    case "normal":
      asTime = 400;
      break;
    case "fast":
      asTime = 200;
      break;
    default:
      asTime = this.animationSpeed;
  }
  if( bar != 'object'); {
    $("body").prepend(bar);
  }
  bar.slideDown(asTime);

  // If taken from DOM dot not remove just hide
  if( bar.attr("id") == "__notifyBar") {
    setTimeout("$('#" + id + "').slideUp(" + asTime +", function() {$('#" + id + "').remove()});", this.delay + asTime);
  } else {
    setTimeout("$('#" + id + "').slideUp(" + asTime +", function() {$('#" + id + "')});", this.delay + asTime);
  }
};

String.prototype.wordWrap = function(m, b, c){
    var i, j, l, s, r;
    if(m < 1)
        return this;
    for(i = -1, l = (r = this.split("\n")).length; ++i < l; r[i] += s)
        for(s = r[i], r[i] = ""; s.length > m; r[i] += s.slice(0, j) + ((s = s.slice(j)).length ? b : ""))
            j = c == 2 || (j = s.slice(0, m + 1).match(/\S*(\s)?$/))[1] ? m : j.input.length - j[0].length
            || c == 1 && m || j.input.length + (j = s.slice(m).match(/^\S*/)).input.length;
    return r.join("\n");
};

/* Nano Templates (Tomasz Mazur, Jacek Becela) */
(function($){
  $.nano = function(template, data, wordLength) {
    return template.replace(/\{([\w\.]*)\}/g, function (str, key) {
      var keys = key.split("."), value = data[keys.shift()];
      $.each(keys, function () { value = value[this]; });
//    return (value === null || value === undefined || value === "undefined") ? "Empty" :  typeof(value) == "string" ? (typeof(wordLength) !== 'undefined' ? parseInt(wordLength) : 84), '<br />', 0) : value;
      return (value === null || value === undefined || value === "undefined") ? "Empty" :  value;
    });
  };
})(jQuery);

$.fn.serializeForm = function()
{
    data = {};
    url = this.attr("action");
    items = this.serializeArray();
    $.each(items,function(i,item)
    {
        data[item['name']]=item['value'];
    }
    );
    return data;
}

$.fn.delay = function(time, callback){
    // Empty function:
    jQuery.fx.step.delay = function(){};
    // Return meaningless animation, (will be added to queue)
    return this.animate({delay:1}, time, callback);
}

