function trim(s) 
{
	return s.replace(/^\s+|\s+$/g,'');
}

function add_event(type, fn)
{
    if (window.addEventListener){
        window.addEventListener(type, fn, '');
    } else if (window.attachEvent){
        window.attachEvent('on' + type, fn);
    }
}

	function update_arrows()
	{
		if (current_position <= 0) {
			document.getElementById('slide-left').innerHTML = "&nbsp;";
		} else {
			document.getElementById('slide-left').innerHTML = left_arrow;
		}
		
		if (current_position >= travel_distance) {
			document.getElementById('slide-right').innerHTML = "&nbsp;";
		} else {
			document.getElementById('slide-right').innerHTML = right_arrow;
		}
	}
	
	function portfolio_init()
	{	
		bucket = document.getElementById('thumb-bucket');
		view_width = document.getElementById('slide-top').offsetWidth;
		real_width = bucket.offsetWidth;
		travel_distance = real_width - view_width;	
		update_arrows();
	}
	function stop_slide()
	{
		move = false;	
	}
	
	function slide_left(state)
	{
		if (current_position > 0) { // only slide if not anchored to left
			move = true;
			timeout = setTimeout('slide(' + ( slide_speed) + ')', 30);
		}
	}
	
	function slide_right()
	{
		if (current_position < travel_distance) { // only slide if not anchored to left
			move = true;
			timeout = setTimeout('slide(' + ( slide_speed * -1) + ')', 30);
		}
	}
		
	function slide(direction_vector)
	{
		clearTimeout(timeout);
		
		if (move) {
			if (direction_vector < 0) { // moving right
				var move_distance = current_position >= travel_distance ? 0 : direction_vector;
			} else if (direction_vector > 0) {			
				var move_distance = Math.abs(direction_vector) > current_position ? current_position * -1 : direction_vector;
			}
			
			if (move_distance) {
				current_position += move_distance * -1;

				bucket.style.left = (current_position*-1) + "px";
				
				update_arrows();
				
				if (current_position <= 0 || current_position >= travel_distance) {
					current_position = current_position < 0 ? 0 : current_position;
					current_position = current_position > travel_distance ? travel_distance : current_position;
					move = false;
				} else {
					timeout = setTimeout('slide(' + ( direction_vector) + ')', 30);
				}	
			}
		}
	}
	
	function stripslashes(str) 
	{
		str=str.replace(/\\'/g,'\'');
		str=str.replace(/\\"/g,'"');
		str=str.replace(/\\\\/g,'\\');
		str=str.replace(/\\0/g,'\0');
		return str;
	}
	
	function update_detail()
	{
		document.getElementById('full-img').src = slide_images[current_slide_num].src;
		document.getElementById('detail-title').innerHTML = slide_title[current_slide_num];
		document.getElementById('detail-date').innerHTML = slide_date[current_slide_num];
		document.getElementById('detail-description').innerHTML = stripslashes(slide_description[current_slide_num]);
		
		var url = "";
		if (slide_website_url[current_slide_num]) {
			url = "<a href='"+slide_website_url[current_slide_num]+"' onclick='window.open(this); return false;'><img src='"+link_image+"' alt='Visit Website' /></a>";
			document.getElementById('full-img').onclick = function() { window.open(slide_website_url[current_slide_num]); return false; }
		} else {
			document.getElementById('full-img').onclick = null;
		}
		document.getElementById('slide-link').innerHTML = url;

	}
	
	function remove(x)
	{
		clearTimeout(timeout);
		opacity = x;
		if (opacity >= 0) {
			changeOpac(opacity);
			opacity -= 10;
			timeout = setTimeout("remove(" + (opacity) + ")", 25);
		} else {
			update_detail();
			show(0);
		}
	}
	
	
	
	function show(x)
	{
		clearTimeout(timeout);
		opacity = x;
		if (opacity <= 100) {
			var ele = new Array('detail-description', 'full-img', 'detail-title', 'detail-date');
			for (var i =0; i < ele.length; i++)
			{
				changeOpac(ele[i], opacity);
			}
			opacity += 10;
			timeout = setTimeout("show(" + (opacity) + ")", 25);
		}
	}

	
	function full_view(num)
	{
		if (num != current_slide_num) {
			document.getElementById('thumb-image-' + current_slide_num).style.borderColor = border_color;
			document.getElementById('thumb-image-' + num).style.borderColor = border_color_hover;	
		
			current_slide_num = num;
			remove(100);		
		}	
	}
	
	function highlight(state, obj, num)
	{
		stop_slide();
		if (state) {
			obj.style.borderColor = border_color_hover;
		} else if (current_slide_num != num) {
			obj.style.borderColor = border_color;
		}
	}
	
	var testimonial_timeout;
	
	
	function testimonial()
	{
		var i = 0;
	
		testimonial_timeout = setTimeout('cycle_testimonial(' + i + ', 100)', 6000);
	}
	function cycle_testimonial(i, x)
	{
		clearTimeout(testimonial_timeout);
		opacity = x;
		if (opacity > 0) {
			changeOpac('testimonial-content', opacity);
			opacity -= 2;
			testimonial_timeout = setTimeout("cycle_testimonial(" + (i) + ", " + (opacity) + ")", 30);
		} else {
			++i;
			
			if (i >= testimonial_r.length) {
				i = 0;	
			}
			
			document.getElementById('testimonial-content').innerHTML = testimonial_r[i];
			fade_in_testimonial(i, opacity);
		}	
	}
	
	function fade_in_testimonial(i, opacity)
	{
		clearTimeout(testimonial_timeout);
		if (opacity < 100) {
			changeOpac('testimonial-content', opacity);
			opacity += 2;
			testimonial_timeout = setTimeout("fade_in_testimonial(" + (i) + ", " + (opacity) + ")", 30);
		} else {
			testimonial_timeout = setTimeout('cycle_testimonial(' + i + ', 100)', 6000);
		}
	}
	
	function changeOpac(id, opacity) {
		if (document.getElementById(id)) {
			var object = document.getElementById(id).style;
			object.opacity = (opacity / 100);
			object.MozOpacity = (opacity / 100);
			object.KhtmlOpacity = (opacity / 100);
			object.filter = "alpha(opacity=" + opacity + ")";
		}
	} 