// Multiselect
///////////////////////////////

(function($) {
	
	$.fn.multiselect = function(options) {
		var opts = $.extend({}, $.fn.multiselect.defaults, options);
		
		return this.each(function() {
			var $this = $(this);
			
			// build element specific options
			var o = $.metadata ? $.extend({}, opts, $this.metadata()) : opts;
			
			// clone select
			var $clone = $this.clone();
			var sel = $("select", this).get(0);
			var cloneSelect = $("select", $clone).get(0);
			
			$this.addClass('choose-from');
			$clone.addClass('selection');
			$this.closest('dd').prev().addClass('has-multiselect');
			
			// change label
			$clone.find("label").text("Selection:");
			
			// remove all options
			$clone.find("option").remove();
			
			// move selected options from our select to the clone
			$("option:selected", sel).remove().appendTo(cloneSelect).removeAttr("selected");
			
			this.multiselect = {
				options: o,
				mainSelect: sel,
				otherSelect: cloneSelect,
				addSelection: function() {
					// skip if no selected
					if (!$("option:selected", this.mainSelect).length) {
						alert('no selected');
						return;
					}
					// remove 'all' option from the selected
					if ($("option[value='-1']", this.otherSelect).length > 0) {
						$("option[value='-1']", this.otherSelect).remove().prependTo(this.mainSelect).removeAttr("selected");
					}
					
					// add options
					if(this.options.selectLimit) {
						/*if(total <= this.options.selectLimit)
							$("option:selected", this.mainSelect).remove().appendTo(this.otherSelect).removeAttr("selected");
						else
							alert('You may only choose ' + this.options.selectLimit + ' options.');*/
						
						var total = $("option:selected", this.mainSelect).length + $("option", this.otherSelect).length;
						var remaining = this.options.selectLimit - $("option", this.otherSelect).length;
						$("option:selected:lt(" + (remaining) + ")", this.mainSelect).remove().appendTo(this.otherSelect).removeAttr("selected");
						if(total > this.options.selectLimit)
							alert('You may only choose ' + this.options.selectLimit + ' options.');
					} else {
						$("option:selected", this.mainSelect).remove().appendTo(this.otherSelect).removeAttr("selected");
					}
					
					// if 'all' option is selected, remove all others
					if ($("option[value='-1']", this.otherSelect).length > 0) {
						$("option[value!='-1']", this.otherSelect).remove().appendTo(this.mainSelect);
					}
					
					// if no options are selected, select the 'all' option
					if (!$("option", this.otherSelect).length) {
						$("option[value='-1']", this.mainSelect).remove().appendTo(this.otherSelect);
					}
				},
				removeSelection: function() {
					$("option:selected", this.otherSelect).remove().appendTo(this.mainSelect).removeAttr("selected");
					
					// if no options are selected, select the 'all' option
					if (!$("option", this.otherSelect).length) {
						$("option[value='-1']", this.mainSelect).remove().appendTo(this.otherSelect);
					}
				},
				prepareForSubmit: function() {
					$("option:selected", this.mainSelect).removeAttr("selected");
					$("option", this.otherSelect).remove().attr("selected", "selected").appendTo(this.mainSelect);
					$(this.otherSelect).remove();
				}
			};
			
			//this.multiselect.addSelection();
			
			var $buttons = $('<div class="multiselect-buttons"><a href="#" class="add">&gt;</a><a href="#" class="remove">&lt;</a></div>');
			
			//$this.wrap('<div class="multiselect"></div>');
			$this.after($clone).after($buttons);
			
			var ms = this.multiselect;
			$this.closest('form').submit(function() {
				ms.prepareForSubmit();
			});
			
			$buttons.find(".add").click(function() {
				ms.addSelection();
				return false;
			});
			
			$buttons.find(".remove").click(function() {
				ms.removeSelection();
				return false;
			});
		});
	}
	
	$.fn.multiselect.defaults = { selectLimit: 5 };
	
	$(document).ready(function() {
		$("div.multiselect").multiselect();
	});
	
})(jQuery);

// Expandable
///////////////////////////////

$(document).ready(function() {
	$(".section dl.expandable > dt:not(.no-expand)").each(function() {
		var $dtObj = $(this);
		
		// hide non-expanded
		if(!$dtObj.hasClass("expanded"))
			$dtObj.next().hide();
			
		// bind expand-toggles
		$dtObj.find(".expand").click(function() {
			$dtObj.toggleClass("expanded");
			$dtObj.next().slideToggle("fast");
			return false;
		});
	});
});

// Contactlist
///////////////////////////////

var POPUP_WIDTH = 600;
var POPUP_HEIGHT = 460;
var AJAX_MY_PEOPLE_URL = '/ajax/people/';
var INPUT_DEFAULT_MESSAGE = "Click here to browse your contacts.";

function getContactName(contactData) {
	
	//return (contactData && contactData['alias'] && contactData['alias'].length > 0) ? contactData['alias'] : contactData['first'] + " " + contactData['last'];
	return contactData['first'] + " " + contactData['last'];
}

function Contact(contactData) {

	if (typeof(_contact_prototype_called) == 'undefined') {
		_contact_prototype_called = true;
	}
	
	var obj = this;
	
	this.addLink = $('<a class="add-person"></a>');
	this.removeLink = $('<a class="remove-person"></a>');
	this.contactData = contactData;
	this.contactName = getContactName(contactData);
	this.label = contactData['last'] + contactData['first'];//(contactData && contactData['alias'] && contactData['alias'].length > 0) ? contactData['alias'] : contactData['last'];
	this.label = this.label.charAt(0).toUpperCase();
	
	var listItem = $('<li class="person-' + this.contactData['id'] + '"><span class="person-name">' + this.contactName + '</span></li>');
	
	$.extend(this, listItem);
	
	listItem.append(this.addLink);
	listItem.append(this.removeLink);
	
	$(this.addLink).click(function() { $.contacts.selectContact(obj); return false; });
	$(this.removeLink).click(function() { $.contacts.deselectContact(obj); return false; });
}

function ContactSelector() {
	
	// set up function prototypes
	
	if (typeof(_contactselector_prototype_called) == 'undefined') {
		_contactselector_prototype_called = true;
		ContactSelector.prototype.update = update;
		ContactSelector.prototype.loadContacts = loadContacts;
		ContactSelector.prototype.filterContacts = filterContacts;
		ContactSelector.prototype.initControls = initControls;
		ContactSelector.prototype.createPopup = createPopup;
		ContactSelector.prototype.showPopup = showPopup;
		ContactSelector.prototype.hidePopup = hidePopup;
		ContactSelector.prototype.selectContact = selectContact;
		ContactSelector.prototype.deselectContact = deselectContact;
		ContactSelector.prototype.getSelectedNames = getSelectedNames;
		ContactSelector.prototype.getSelectedIds = getSelectedIds;
	}
	
	this.caller = '';
	this.contacts = [];
	this.labels = {};
	this.selected = [];
	this.selectedData = [];
	this.popup = null;
	
	this.createPopup();
	
	function update() {
		
		$.contacts.popup.find('#people-search-loader').show();
		$.contacts.popup.find('#people-search').attr("disabled", "disabled");
		$.contacts.popup.find('#people-ok').attr("disabled", "disabled");
		
		$.get(AJAX_MY_PEOPLE_URL, function(data) {
			try {
				$.contacts.loadContacts(eval(data));
			} catch (e) {
				console.log(e);
			}
			$.contacts.popup.find('#people-search-loader').hide();
			$.contacts.popup.find('#people-search').removeAttr("disabled");
			$.contacts.popup.find('#people-ok').removeAttr("disabled");
		});
	}
	
	function loadContacts(data) {
		
		$.contacts.popup.find('#people-results').empty();
		
		this.contacts = [];
		this.labels = {};
		
		var previousLabel = "";
		
		$.each(data, function(i, contactData) {
			
			var newContact = new Contact(contactData);
			$.contacts.contacts.push(newContact);
			
			if (previousLabel != newContact.label) {
				previousLabel = newContact.label;
				$.contacts.popup.find('#people-results').append($('<li class="label" id="label-' + newContact.label + '">' + newContact.label + '</li>'));
				$.contacts.labels[newContact.label] = false;
			}
			
			$.contacts.popup.find('#people-results').append(newContact);
			
			// is this item in the selected list?
			
			if ($.inArray(contactData['id'], $.contacts.getSelectedIds()) > -1)
				$(newContact).addClass("selected");
		});
		
		this.filterContacts();
	}
	
	function filterContacts(e) {
		
		var filterStr = $.trim($.contacts.popup.find('#people-search').val()).replace(/[^a-zA-Z0-9-]+/g, ".*");
		var filterExpr = (filterStr && filterStr != "") ? new RegExp(".*" + filterStr + ".*", "i") : /.*/g;
		
		$.each($.contacts.labels, function(i){ $.contacts.labels[i] = false; });
		
		$.each($.contacts.contacts, function(){
			if (this.contactName && this.contactName.match(filterExpr)) {
				// highlight matched string
				var newNameHtml = this.contactName.replace(new RegExp("(" + filterStr + ")", "i"), "<em>$1</em>");
				this.children(".person-name").html(newNameHtml);
				// setup labels
				$.contacts.labels[this.label] = true;
				// set visibility
				this.show();
			} else {
				this.hide();
			}
		});
		
		$.contacts.popup.find('#people-results li.label').each(function() {
			if ($.contacts.labels[$(this).text()]) {
				$(this).show();
			} else {
				$(this).hide();
			}
		});
	}
	
	function initControls() {
		
		this.popup.find('#people-search').keyup(filterContacts);
		this.popup.find('#people-cancel').click(Shadowbox.close);
		this.popup.find('#people-ok').click(function(){
			$('#' + $.contacts.caller).val($.contacts.getSelectedNames().join(", "));
			$('#' + $.contacts.caller + '-ids').val($.contacts.getSelectedIds().join(","));
			$.contacts.selectedData[$.contacts.caller] = $.contacts.selected.slice();
			$.contacts.hidePopup();
		});
	}
	
	function createPopup() {
		
		var popup = $('<div id="people-selector"></div>');
		var title = $('<h2>My people</h2>');
		var searchInput = $('<input id="people-search" type="text" />');
		var searchLoader = $('<img id="people-search-loader" src="/images/ajax-loader.gif" alt="" />');
		var searchBox = $('<div id="people-search-box">Search </div>');
		var resultList = $('<ul id="people-results"></ul>');
		var selectList = $('<ul id="people-selected"></ul>');
		var okButton = $('<a id="people-ok" class="button">OK</a>');
		var cancelButton = $('<a id="people-cancel" class="button">Cancel</a>');
		var contentDiv = $('<div class="box clearfix"></div>');
		
		searchBox.append(searchInput);
		searchBox.append(searchLoader);
		
		contentDiv.append(searchBox);
		contentDiv.append(resultList);
		contentDiv.append(selectList);
		contentDiv.append(okButton);
		contentDiv.append(cancelButton);
		
		popup.append(title);
		popup.append(contentDiv);
		
		this.popup = popup;
	}
	
	function showPopup(caller) {
		
		this.caller = caller;
		this.selected = [];
		this.initControls();
		this.update();
		
		$.contacts.popup.find('#people-search').val("");
		$.contacts.popup.find('#people-search').focus(); // does not work? :-(
		$.contacts.popup.find('#people-selected').empty();
		$.contacts.popup.find('#people-selected').append($('<li class="label">Selected Contacts:</li>'));
		
		// restore selection
		
		if (this.selectedData[caller] && this.selectedData[caller].length > 0) {
			this.selected = this.selectedData[caller].slice();
			$.each(this.selected, function(){ $.contacts.popup.find('#people-selected').append(new Contact(this)); });
		}
		
	    Shadowbox.open({
	      content:	$.contacts.popup,
	      player:	"jquery",
	      title:	"",
	      height:	POPUP_HEIGHT,
	      width:	POPUP_WIDTH
	    });
	}
	
	function hidePopup() {
		var $caller = $('#' + $.contacts.caller);
		if ($caller && $caller.val() == "") {
			$caller.val(INPUT_DEFAULT_MESSAGE);
			$caller.addClass("form-field-default");
		}
		else {
			if ($caller.val() != INPUT_DEFAULT_MESSAGE)
				$caller.removeClass("form-field-default");
		}
		Shadowbox.close();
	}

	function selectContact(contact) {
		
		var contactData = contact['contactData'];
		
		for (i in this.selected) {
			if (this.selected[i]['id'] == contactData['id']) {
				console.log("Item already selected.");
				return;
			}
		}
		$.contacts.popup.find('#people-selected').append(new Contact(contactData));
		$.contacts.popup.find('#people-results .person-' + contactData['id']).addClass("selected");
		
		this.selected.push(contactData);
	}

	function deselectContact(contact) {
		var contactData = contact['contactData'];
		for (i in this.selected) {
			if (this.selected[i]['id'] == contactData['id']) {
				this.selected.splice(i, 1);
				$.contacts.popup.find('#people-results .person-' + contactData['id']).removeClass("selected");
				$(contact).slideUp(100, function(){$(contact).remove();}); 
				break;
			}
		}
	}

	function getSelectedNames() {
		var names = [];
		for (i in this.selected)
			names.push(getContactName(this.selected[i]));
		return names;
	}

	function getSelectedIds() {
		var ids = [];
		for (i in this.selected)
			ids.push(this.selected[i]['id']);
		return ids;
	}
}

(function($) {
	
	$.fn.contactlist = function() {
		
		if (typeof($.contacts) == 'undefined')
			$.extend({ contacts: new ContactSelector() });
		
		return this.each(function() {
			
			var obj = this;
			var $ids = $('#' + this.id + '-ids');
			
			if ($ids.size() == 0)
				$(this.form).append('<input type="hidden" id="' + this.id + '-ids" name="' + this.id + '-ids" value="" />');
			
			if ($ids.val() != "") {
				$.get(AJAX_MY_PEOPLE_URL, { 'list': $ids.val() }, function(data) {
					try {
						$.contacts.selectedData[obj.id] = eval(data);
					} catch (e) {
						console.log(e);
					}
				});
			} else {
				$(this).val(INPUT_DEFAULT_MESSAGE);
				$(this).addClass("form-field-default");
			}
			
			$(this).attr("readonly", "readonly");
			$(this).click(function() { $.contacts.showPopup(obj.id); });
		});
	}

	$(document).ready(function() {
		$(".contactlist").contactlist();
	});

})(jQuery);


// Search
///////////////////////////////

$(function() {
  $('.criteria .more > a, .section-refine-search .more > a').click(function() {
  	
  	//alert($('<div><form action="test" method="post"><input type="hidden" name="test" value="test"/></form></div>').html());
  	
  	var $div = $(this).next().clone();
  	$div.find('.multiselect-disabled').removeClass('multiselect-disabled').addClass('multiselect');
  	$div.find('.multiselect').multiselect();
  	$div.find('input[type=reset]').click(function() {
  		Shadowbox.close();
  	});
  	
    Shadowbox.open({
      content:    $div,
      player:     "jquery",
      title:      "",
      height:     220,
      width:      390
    });

    return false;
  });
});

// Bookmark
////////////////////////////////////////////

$(document).ready(function() {

	readBookmarkCookie();
	removeHomeBookmark();
	
});
var bookmarks = [];

/* remove bookmark */

function removeHomeBookmark(){
	$(".removeBookmarkBtn").each(function(){
		$(this).click(function(){
			addHomeBookmarksLoader();
			//reset the button
			
			var btn = $("#" + $(this).attr('id'));
			bookmarks[$(this).attr('id')] = undefined;
			if(btn){
				if($(btn).attr('href') == "#")
					$(btn).text('Bookmark');
				else{
					$(btn).attr('value','Bookmark');
					$(btn).attr('disabled','false');
				}
			}
			//remove the bookmark from server
			var vars = $(this).attr('id').split("-");
			$.ajax({
				type: "POST",
				url: "bookmarks/remove/",
				data: {'type':vars[0],'id':vars[1]},
				success: function(data){getHomeBookmarks(data)},
				error: function(data){getHomeBookmarks(data)}
			});
			//if this is the clipboard page for dialogue, remove the tr element
			if($("#t"+$(this).attr('id')).size() > 0)
				$("#t"+$(this).attr('id')).hide();
				
			if($("#d"+$(this).attr('id')).size() > 0)
				$("#d"+$(this).attr('id')).hide();	
				
			return false;
		});
	});
}

/* show loader */

function addHomeBookmarksLoader(){
	$("#homeBookmarks .content").hide();
	$("#homeBookmarks .loader").show();

}

/* hide loader*/
function removeHomeBookmarksLoader(){
	$("#homeBookmarks .loader").hide();
	$("#homeBookmarks .content").show();
}
/* reload list of bookmarks */
function getHomeBookmarks(data){
	
	
	
	if($("#homeBookmarks").size() < 1)
		return;
		
	$.ajax({
		type: "POST",
		url: "bookmarks/list/",
		data: {'number':6},
		success: function(data){reloadHomeBookmarks(data)},
		error: function(data){removeHomeBookmarksLoader()},
		dataType: 'json'
	})
}
/* handle response from server and show the list of bookmarks */
function reloadHomeBookmarks(data){
	$("#homeBookmarks .content").html('');
	var c = 0;
	$(data).each(function(){

		var o = '';
		o += '<div class=\"holder\" style=\"margin-right:1px; margin-left:2px;\"><div class=\"picture\" style=\"background-image: url('+this.picture_url+');\">';
		o += '<img id=\"'+this.object_type+'-'+this.object_id+'\" class="removeBookmarkBtn" src=\"images/bookmark-remove.jpg\"/>';
		o += '</div><a href=\"'+this.object_url+'\" title=\"'+this.alt+'\">'+this.title+'</a></div>';
		
		$("#homeBookmarks .content").append(o);
		c++;
	});
	if(c == 0)
		$('.section-home-bookmarks').hide();
	removeHomeBookmark();
	readBookmarkCookie();
	removeHomeBookmarksLoader();
}


/* add bookmark buttons functionality */

function addBookmarkHandler(){

	$(".bookmark").each(function(i) {
		
		var vars = $(this).attr('id').split("-");
		
		if(bookmarks[$(this).attr('id')] == undefined){
			//not bookmarked
			
			if($(this).attr('href') == "#")
				$(this).text('Add to clipboard');
			else
				$(this).attr('value','Follow');
			
			$(this).unbind('click');
			$(this).click(function(){
				if($(this).attr('href') == "#")
					$(this).text('Adding...');
				else
					$(this).attr('value','Adding...');
					
				var vars = $(this).attr('id').split("-");
				var objectPointer = this;
				 $.ajax({
				   type: "POST",
				   url:  "/bookmarks/make/",
				   data: {'type':vars[0],'id':vars[1]},
				   success: function(data){handleAddBookmarkResponse(data,objectPointer,'success')},
				   error: function(data){handleAddBookmarkResponse(data,objectPointer,'error')}
				 });
	
				return false;	
			});
		}else{
			//bookmarked, don't add button action.
			if($(this).attr('href') == "#"){
				$(this).text('Added to clipboard');
				$(this).click(function(){window.location = "/my-clipboard/"; return false;});
			}else{
				$(this).attr('value','Following');
				$(this).attr('disabled','true');
				$(this).click(function(){window.location = "/dialogue/following/"; return false;});
			}
		}
	});
}

/* read and prepare the cookie to a array */

function readBookmarkCookie(){
	var tmpbookmarks = getCookie("lava_bookmarks");
	if(tmpbookmarks)
		tmpbookmarks = unserialize(tmpbookmarks);
		
	if(tmpbookmarks != "")
		bookmarks = tmpbookmarks;
	
	addBookmarkHandler();			
}

function readBookmarkCookieFromServer(){
	addBookmarkHandler();
}

/* handle the bookmark response when adding bookmark */

function handleAddBookmarkResponse(data, btn, status){
	
	if(status == "success"){
		if($(btn).attr('href') == "#")
			$(btn).text('Added to clipboard');
		else{
			$(btn).attr('value','Following');
			$(btn).attr('disabled','true');
		}
		
		getHomeBookmarks();

	}else if(status == "error"){
		if($(btn).attr('href') == "#")
		    $(btn).text('Clipboarding failed');
		else
			$(btn).attr('value','Following failed');
	}
}

/* cookie stuff */

function getCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=");
  if (c_start!=-1)
    {
    c_start=c_start + c_name.length+1;
    c_end=document.cookie.indexOf(";",c_start);
    if (c_end==-1) c_end=document.cookie.length;
    return unescape(document.cookie.substring(c_start,c_end));
    }
  }
return "";
}

function unserialize (data) {
    // Takes a string representation of variable and recreates it 
    //
    // version: 908.406
    // discuss at: http://phpjs.org/functions/unserialize
    // +     original by: Arpad Ray (mailto:arpad@php.net)
    // +     improved by: Pedro Tainha (http://www.pedrotainha.com)
    // +     bugfixed by: dptr1988
    // +      revised by: d3x
    // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +        input by: Brett Zamir (http://brett-zamir.me)
    // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     improved by: Chris
    // +     improved by: James
    // %            note: We feel the main purpose of this function should be to ease the transport of data between php & js
    // %            note: Aiming for PHP-compatibility, we have to translate objects to arrays
    // *       example 1: unserialize('a:3:{i:0;s:5:"Kevin";i:1;s:3:"van";i:2;s:9:"Zonneveld";}');
    // *       returns 1: ['Kevin', 'van', 'Zonneveld']
    // *       example 2: unserialize('a:3:{s:9:"firstName";s:5:"Kevin";s:7:"midName";s:3:"van";s:7:"surName";s:9:"Zonneveld";}');
    // *       returns 2: {firstName: 'Kevin', midName: 'van', surName: 'Zonneveld'}
    var error = function (type, msg, filename, line){throw new this.window[type](msg, filename, line);};
    var read_until = function (data, offset, stopchr){
        var buf = [];
        var chr = data.slice(offset, offset + 1);
        var i = 2;
        while (chr != stopchr) {
            if ((i+offset) > data.length) {
                error('Error', 'Invalid');
            }
            buf.push(chr);
            chr = data.slice(offset + (i - 1),offset + i);
            i += 1;
        }
        return [buf.length, buf.join('')];
    };
    var read_chrs = function (data, offset, length){
        var buf;
 
        buf = [];
        for (var i = 0;i < length;i++){
            var chr = data.slice(offset + (i - 1),offset + i);
            buf.push(chr);
        }
        return [buf.length, buf.join('')];
    };
    var _unserialize = function (data, offset){
        var readdata;
        var readData;
        var chrs = 0;
        var ccount;
        var stringlength;
        var keyandchrs;
        var keys;
 
        if (!offset) {offset = 0;}
        var dtype = (data.slice(offset, offset + 1)).toLowerCase();
 
        var dataoffset = offset + 2;
        var typeconvert = new Function('x', 'return x');
 
        switch (dtype){
            case 'i':
                typeconvert = function (x) {return parseInt(x, 10);};
                readData = read_until(data, dataoffset, ';');
                chrs = readData[0];
                readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case 'b':
                typeconvert = function (x) {return parseInt(x, 10) !== 0;};
                readData = read_until(data, dataoffset, ';');
                chrs = readData[0];
                readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case 'd':
                typeconvert = function (x) {return parseFloat(x);};
                readData = read_until(data, dataoffset, ';');
                chrs = readData[0];
                readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case 'n':
                readdata = null;
            break;
            case 's':
                ccount = read_until(data, dataoffset, ':');
                chrs = ccount[0];
                stringlength = ccount[1];
                dataoffset += chrs + 2;
 
                readData = read_chrs(data, dataoffset+1, parseInt(stringlength, 10));
                chrs = readData[0];
                readdata = readData[1];
                dataoffset += chrs + 2;
                if (chrs != parseInt(stringlength, 10) && chrs != readdata.length){
                    error('SyntaxError', 'String length mismatch');
                }
            break;
            case 'a':
                readdata = {};
 
                keyandchrs = read_until(data, dataoffset, ':');
                chrs = keyandchrs[0];
                keys = keyandchrs[1];
                dataoffset += chrs + 2;
 
                for (var i = 0; i < parseInt(keys, 10); i++){
                    var kprops = _unserialize(data, dataoffset);
                    var kchrs = kprops[1];
                    var key = kprops[2];
                    dataoffset += kchrs;
 
                    var vprops = _unserialize(data, dataoffset);
                    var vchrs = vprops[1];
                    var value = vprops[2];
                    dataoffset += vchrs;
 
                    readdata[key] = value;
                }
 
                dataoffset += 1;
            break;
            default:
                error('SyntaxError', 'Unknown / Unhandled data type(s): ' + dtype);
            break;
        }
        return [dtype, dataoffset - offset, typeconvert(readdata)];
    };
     
    return _unserialize((data+''), 0)[2];
}

// Contact
/////////////////////////////

var CONTACT_AJAX = "/ajax/contact/";

(function($) {
	
	$.fn.contactlink = function() {
		
		$(this).click(function(){
			
			var $div = $(".contact_popup").clone().show();
			var $popupLink = $(this);
			
			switch($(this).attr('href')){
				case "#remove":
					$div.find("h3").text("Remove contact?");
					$div.find(".message").text("Are you sure you want to remove this user from your network?");
					$div.find(".addBtn").attr("value","yes");
					$div.find(".addBtn").click(function(){
						$div.find(".message").text("Plaese wait while removing contact.");	
						$div.find(".addBtn").hide();
						$div.find(".removeBtn").hide();
						
						$.ajax({
							type: "POST",
							url: CONTACT_AJAX,
							data: {'action':'remove_contact','member_id':$popupLink.attr('id')},
							success: function(data){
								$popupLink.text("Add contact");
								$popupLink.attr("href", "#add");
								Shadowbox.close();
							},
							error: function(data){
								Shadowbox.close();
							}
						});
						
					});
					$div.find(".removeBtn").attr("value","no");
					$div.find(".removeBtn").click(function(){Shadowbox.close();});	
				break;
				case "#add":
					$div.find("h3").text("Add contact?");
					$div.find(".message").html("Add this person to your contact list?<br /><br />Enter personal message below:");
					$div.find(".addBtn").attr("value","send");
					$div.find(".personal_message").show();
					$div.find(".addBtn").click(function(){
						$div.find(".message").text("Plaese wait while sending invite.");	
						$div.find(".addBtn").hide();
						$div.find(".removeBtn").hide();
						$div.find(".personal_message").hide();
						$.ajax({
							type: "POST",
							url: CONTACT_AJAX,
							data: {'action':'add_request','member_id':$popupLink.attr('id'),'personal_message':$div.find(".personal_message").val()},
							success: function(data){
								$popupLink.text("Pending connection request");
								$popupLink.attr("href", "#pending_creator");
								Shadowbox.close();
							},
							error: function(data){
								Shadowbox.close();
							}
						});
						
					});
					$div.find(".removeBtn").attr("value","cancel");
					$div.find(".removeBtn").click(function(){Shadowbox.close();});
				break;
				case "#pending_creator":
				
					$div.find(".message").text("Stop waiting for user to respond?");
					$div.find(".addBtn").attr("value","yes");
					$div.find(".addBtn").click(function(){
						$div.find(".message").text("Plaese wait while removing contact request.");	
						$div.find(".addBtn").hide();
						$div.find(".removeBtn").hide();
						
						$.ajax({
							type: "POST",
							url: CONTACT_AJAX,
							data: {'action':'remove_request','member_id':$popupLink.attr('id')},
							success: function(data){
								$popupLink.text("Add contact");
								$popupLink.attr("href", "#add");
								Shadowbox.close();
							},
							error: function(data){
								Shadowbox.close();
							}
						});
						
					});
					$div.find(".removeBtn").attr("value","no");
					$div.find(".removeBtn").click(function(){Shadowbox.close();});
				break;
				case "#pending_reciver":
					$div.find(".message").text("Do you want to add this user to your network?");
					$div.find(".addBtn").attr("value","accept");
					$div.find(".addBtn").click(function(){
						$div.find(".message").text("Plaese wait while accepting invite.");	
						$div.find(".addBtn").hide();
						$div.find(".removeBtn").hide();
						
						$.ajax({
							type: "POST",
							url: CONTACT_AJAX,
							data: {'action':'accept_request','member_id':$popupLink.attr('id')},
							success: function(data){
								if($popupLink.attr("rel") == "mail"){
								
								}else{
									$popupLink.text("Remove contact");
									$popupLink.attr("href", "#remove");
								}
								Shadowbox.close();
							},
							error: function(data){
								Shadowbox.close();
							}
						});
						
					});
					$div.find(".removeBtn").attr("value","decline");
					$div.find(".removeBtn").click(function(){
						$div.find(".message").text("Plaese wait while declining invite.");	
						$div.find(".addBtn").hide();
						$div.find(".removeBtn").hide();
						
						$.ajax({
							type: "POST",
							url: CONTACT_AJAX,
							data: {'action':'decline_request','member_id':$popupLink.attr('id')},
							success: function(data){
								if($popupLink.attr("rel") == "mail"){
								
								}else{	
									$popupLink.text("Add contact");
									$popupLink.attr("href", "#add");
								}
								Shadowbox.close();
							},
							error: function(data){
								Shadowbox.close();
							}
						});
						
					});
				break;
			}
			
			Shadowbox.open({
		      content:    $div,
		      player:     "jquery",
		      title:      "",
		      height:     215,
		      width:      450
		    });
		    
		    return false;
			
			
		});	
		
		
		
	}

	$(document).ready(function() {
		$(".contactlink").contactlink();
	});

})(jQuery);


// Join closed groups
$(function() {
	$('.join-closed-group').click(function(){
		$popup = $('<div class="contact_popup popup">'
					+ '<form method="post" action="">'
					+ '<h2 class="header">Join Closed Group</h2>'
					+ '<div class="box clearfix">'
					  + '<p class="message">This is a closed group. Please apply for membership below.</p>'
					  + '<textarea name="message" class="personal_message" ></textarea>'
					+ '</div>'
					+ '<input class="cancel button" type="button" value="Cancel">'
					+ '<input class="button" type="submit" value="Join">'
					+ '</form>'
					+ '</div>');
		
		$popup.find('form').attr('action',$(this).attr('href'));
		$popup.find('.cancel').click(function(){
			Shadowbox.close();
		});
					
		Shadowbox.open({
	      content:    $popup,
	      player:     "jquery",
	      title:      "",
	      height:     215,
	      width:      450
	    });
		
		return false;
	});
});

// Try to join a closed group when membership is pending
$(function() {
	$('.join-closed-group-pending').click(function(){
		$popup = $('<div class="contact_popup popup">'
					+ '<h2 class="header">Pending</h2>'
					+ '<div class="box clearfix">'
					  + '<p class="message">Your request to join this group is still pending</p>'
					+ '</div>'
					+ '<input class="ok button" type="button" value="OK">'
					+ '</div>');
		
		$popup.find('form').attr('action',$(this).attr('href'));
		$popup.find('.ok').click(function(){
			Shadowbox.close();
		});
					
		Shadowbox.open({
	      content:    $popup,
	      player:     "jquery",
	      title:      "",
	      height:     215,
	      width:      450
	    });
		
		return false;
	});
});


// Tour
//////////////////

$(function() {
	$('.tour-buttons .tour-button-investor').hover(
		function(){
			$('#main .section-tour .tour-box').removeClass("tour-box-emerging").removeClass("tour-box-established").addClass("tour-box-investor");
		},
		function(){
			$('#main .section-tour .tour-box').removeClass("tour-box-investor").addClass("tour-box-emerging");
		}
	);
	$('.tour-buttons .tour-button-established').hover(
		function(){
			$('#main .section-tour .tour-box').removeClass("tour-box-emerging").removeClass("tour-box-established").addClass("tour-box-established");
		},
		function(){
			$('#main .section-tour .tour-box').removeClass("tour-box-established").addClass("tour-box-emerging");
		}
	);
});


// General
//////////////////////////////////////

$(function() {
	// pir
	$.pir.options.php="shared/libs/pir-0.1/pir.php";
	if(!$.browser.msie) {
		$piritems = $("h2, h2 span.tabs-title, h2 ul.tabs li a, h3, th.forum-header").filter(":not(.no-pir)");
		$piritems.pir({font: "fslola-medium.otf"});
	} else {
		$piritems = $("none");
	}
	
	if(typeof DD_belatedPNG != "undefined") {
		DD_belatedPNG.fix('#top ul li, #top, #content .section h2');
		$piritems.find('img').each(function() {
			DD_belatedPNG.fixPng(this);
		});
	}
	
	$(".datepicker").datepicker({dateFormat:'dd-mm-yy',changeMonth: true,changeYear: true, yearRange:'1900:2050'});
});

Shadowbox.init({enableKeys: false, players: ["swf", "html", "jquery"], overlayOpacity: 0.1});
