function request_feature() {
	getURL("/?ajax=1&a=resume&a2=request_feature&request="+encodeToURL(document.getElementById("requestFeature").value)+"&uid=2", "Sending...");    

	document.getElementById("requestBtn").value="Sent!";
	document.getElementById("requestFeature").value="Thanks for your feedback!";
	document.getElementById("requestBtn").disabled=true;
}

function slidein() {
	var fadeBy = 20;
	if(toFade) {    
		if(height_interval+fadeBy<stop_height) {
			height_interval = height_interval+fadeBy;
			toFade.style.height=height_interval+"px";

			setTimeout("slidein()", "10");
		} else {
			toFade.style.height=""; // fixes overflow in FF
			document.getElementById("content").style.height=""; // fixes overflow in FF
			intervals = 0;
			fadein();
		}
	} else {
		isContentWorking = false;
	}
}

function fadein() {

	if(browser != "Microsoft Internet Explorer") {
		intervals = intervals+.1;
		toFade.style.MozOpacity=intervals;
		toFade.style.opacity=intervals;
		if(intervals<=".8") { 
			setTimeout("fadein()", "20");
		} else {
			isContentWorking = false;
		}
	} else {
		intervals = intervals+10;
		toFade.style.filter="alpha(opacity="+intervals+")";
		if(intervals<=80) {
			setTimeout("fadein()", "20");
		} else {
			isContentWorking = false;
		}
	}
}
    
function fade() {
	if(toFade) {
		if(browser != "Microsoft Internet Explorer") {
			intervals = intervals-.1;
			toFade.style.MozOpacity=intervals;
			toFade.style.opacity=intervals;
		} else {
			intervals = intervals-10;
			toFade.style.filter="alpha(opacity="+intervals+")";
		}
      
		if(intervals>=-.1) {
			setTimeout("fade()", "20");
		} else {
			height_interval = toFade.offsetHeight;
			document.getElementById("container").style.height=document.getElementById("container").offsetHeight+"px";
			slide();
		}
	} else {
		isContentWorking = false;
	}
} 
  
function slide() {
	var fadeBy = 20;
    
	if(height_interval>=fadeBy) {
		if(height_interval>550) { fadeBy = height_interval/2; }
		height_interval = height_interval-fadeBy;
		toFade.style.height=height_interval+"px";
		toFade.style.overflow="hidden";
    
		setTimeout("slide()", "10");
	} else {

		var parent = toFade.parentNode;
		var entry  = toFade;
		parent.removeChild(entry);
		document.getElementById("container").style.height=null;
		if(parent.parentNode.offsetHeight < 100) {
			intervals = 1;
			toFade = parent.parentNode;
			if(toFade.id != "content") fade();
		        getCurrentSectionList();
		        getLinkedSectionList();
			getSectionList();
		}
		isContentWorking = false;
	}
}
    
function shrink_sections() {
	var root = document.getElementById("content");
	var divs = root.getElementsByTagName("div");
	var i;

	for (i = 0; i < divs.length; i++) {
		if(divs[i].className != "resume_section") continue;
		if(divs[i].style.height == "") { 
			divs[i].expr = divs[i].offsetHeight-10; 
			divs[i].style.height = divs[i].offsetHeight; 
			divs[i].style.overflow = "hidden";
		}
		divs[i].style.height = "30px";
	}
}

function restore_sections() {
	var root = document.getElementById("content");
	var divs = root.getElementsByTagName("div");
	var i;

	for (i = 0; i < divs.length; i++) {
		if(divs[i].className != "resume_section") continue;
		divs[i].style.overflow = "";
		divs[i].style.height = divs[i].expr-10+"px";
		divs[i].style.height = null;
		divs[i].expr = "";
	}
}

function shrink_entries(sectionid) {
	var root = document.getElementById("section"+sectionid);
	var divs = root.getElementsByTagName("span");
	var i;

	for (i = 0; i < divs.length; i++) {
		if(divs[i].className != "entry_multi") continue;
		if(divs[i].style.height == "") { 
			divs[i].expr = divs[i].offsetHeight-10; 
			divs[i].style.height = divs[i].offsetHeight; 
			divs[i].style.overflow = "hidden";
		}
		divs[i].style.height = "70px";
	}
}

function restore_entries(sectionid) {
	var root = document.getElementById("section"+sectionid);
	var divs = root.getElementsByTagName("span");
	var i;

	for (i = 0; i < divs.length; i++) {
		if(divs[i].className != "entry_multi_move") continue;
		divs[i].style.overflow = "";
		divs[i].style.height = divs[i].expr-10+"px";
		divs[i].style.height = null;
		divs[i].expr = "";
	}
}

function validateSignup() {
	var isError = 0;
	document.getElementById("formError").innerHTML = "";

	// validate email
	if(!isValidEmail(document.getElementById("newEmail").value)) {
		document.getElementById("formError").innerHTML = "Invalid Email Address";
		isError = 1;
	}

	// validate name
	if(document.getElementById("newName").value.length < 2) {
		if(isError == 1) { 
			document.getElementById("formError").innerHTML += ", You must enter a name";
		} else {
			document.getElementById("formError").innerHTML = "You must enter a name";
			isError = 1;
		}
	}

	// validate password quality
	if(document.getElementById("newPassword1").value.length < 5) {
		if(isError == 1) { 
			document.getElementById("formError").innerHTML += ", Passwords must be more than 4 characters in length";
		} else {
			document.getElementById("formError").innerHTML = "Passwords must be more than 4 characters in length";
			isError = 1;
		}
	}

	// validate match
	if(document.getElementById("newPassword1").value != document.getElementById("newPassword2").value) {
		if(isError == 1) { 
			document.getElementById("formError").innerHTML += ", Passwords don't match";
		} else {
			document.getElementById("formError").innerHTML = "Passwords don't match";
			isError = 1;
		}
	}

	// validate terms
	if(document.getElementById("terms").checked == 0) {
		if(isError == 1) { 
			document.getElementById("formError").innerHTML += ", Please accept the Terms of Service";
		} else {
			document.getElementById("formError").innerHTML = "Please accept the Terms of Service";
			isError = 1;
		}
	}
	return (isError==0)?true:false;
}

function updateResumeDock(command) {
	if(command == "new") {  
		document.getElementById('selectResume').style.display="none";
		document.getElementById('newResume').style.display="inline";
		document.getElementById('newResumeCommand').style.display="none";
		document.getElementById('nameOfNewResume').focus();
	} else if(command == "cancelNew") {
		document.getElementById('nameOfNewResume').value = "";
		document.getElementById('newResume').style.display="none";
		document.getElementById('selectResume').style.display="inline";
		document.getElementById('newResumeCommand').style.display="inline";
	} else if(command == 'newHome') {
		document.getElementById('newResumeHome').style.display="inline";
		document.getElementById('newResumeCommandHome').style.display="none";
		document.getElementById('nameOfNewResumeHome').focus();
		} else if(command == 'cancelNewHome') {
		document.getElementById('nameOfNewResumeHome').value = "";
		document.getElementById('newResumeHome').style.display="none";
		document.getElementById('newResumeCommandHome').style.display="inline";
	} 
}

function showdownloadmenu() {
	resumeinfo=document.getElementById('info_resume').style.display = "none";

	var menu = document.getElementById("downloadoptions");
	var downloadlink = document.getElementById("downloadlink");
	menu.style.display = "block";
	downloadlink.className = "activedownloadlink";
	downloadlink.onclick = hidedownloadmenu;

	var allSelects = document.getElementsByTagName("select");
	for (var i=0;i<allSelects.length;i++) {
		if(allSelects[i].className.indexOf("jobstatus")>-1) {
			allSelects[i].style.visibility = "hidden";
		}
	}	
	
	return false;
}

function hidedownloadmenu() {
	resumeinfo=document.getElementById('info_resume').style.display = "block";

	var menu = document.getElementById("downloadoptions");
	var downloadlink = document.getElementById("downloadlink");
	menu.style.display = "none";
	downloadlink.className = "";
	downloadlink.onclick = showdownloadmenu;

	var allSelects = document.getElementsByTagName("select");
	for (var i=0;i<allSelects.length;i++) {
		allSelects[i].style.visibility = "visible";
	}	
	
	return false;
}

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

function isValidEmail(email) {
    if ((email==null) || (email.length<6)) {
        return false;
    } 
    if (validateCharacters(email)) { 
    	if (
    		(email.indexOf("@") < 1) || (email.lastIndexOf(".") <= email.indexOf("@")) ||
    		(email.indexOf("@") == email.length) || (email.indexOf("..") >=0) ||
    		 (email.indexOf(".") == email.length)
    	) {
    		return false;
    	} else {
    		return true;
    	}
    } else {
		return false;
    }
}

function validateCharacters(email) {
	// replace with regex fanciness at some point 
	var isValid = true;
	email = email.toLowerCase();
	var allowed = "0123456789@.+-_abcdefghijklmnopqrstuvwxyz";
	
	for (var i=0; i < email.length; i++) {
		var next = email.charAt(i);
		if (allowed.indexOf(next) == -1) { 
			isValid = false;
			break;
		}
	}
	return isValid;
}

function keepAlive() {
	getURL("/?a=ajax-keep-alive", "");
	return;
}

function keepAliveOK() {
	isContentWorking = false;
	setTimeout("keepAlive()", "300000");
	return;
}

function addslashes(str) {
	str=str.replace(/\'/g,'\\\'');
	str=str.replace(/\"/g,'\\"');
	str=str.replace(/\\/g,'\\\\');

	return str;
}

function stripslashes(str) {
	str=str.replace(/\\'/g,'\'');
	str=str.replace(/\\"/g,'"');
	str=str.replace(/\\\\/g,'\\');

	return str;
}

function changeLogOK(data) {
	alert(data);
}

function trim(sString){
  while (sString.substring(0,1) == ' ') {
    sString = sString.substring(1, sString.length);
  }
  while (sString.substring(sString.length-1, sString.length) == ' ') {
    sString = sString.substring(0,sString.length-1);
  }
  return sString;
}

function cleanString(theString) {
	var decodedString = '';

	for (var n = 0; n < theString.length; n++){
		var c = theString.charCodeAt(n);

		if (c < 128) {
			decodedString += String.fromCharCode(c);
		}

		if ((c >=224 && c <=229) || (c>=192 && c<=198) || (c<=281 && c>=286)) {
			decodedString += 'a';
		} else if ((c >=232 && c<=235) || (c<=200 && c>=203)) {
			decodedString += 'e';
		} else if ((c>=236 && c<=239) || (c<=204 && c>=207)) {
			decodedString += 'i';
		} else if ((c>=242 && c<=248) || (c<=210 && c>=216)) {
			decodedString += 'o';
		} else if ((c>=249 && c<=252) || (c<=217 && c>=220)) {
			decodedString += 'u';
		} else if (c==253 || c==255 || c==221 || c==376) {
			decodedString += 'y';
		} else if (c==230 || c==198) {
			decodedString += 'ae';
		} else if (c==338 || c==339) {
			decodedString += 'oe';
		} else if (c==199 || c==231) {
			decodedString += 'c';
		} else if (c==209 || c==241) {
			decodedString += 'n';
		} else if (c==352 || c==353) {
			decodedString += 's';
		} else if (c==208 || c==240) {
			decodedString += 'eth';
		} else if (c==223) {
			decodedString += 'sz';
		} else if  (c>127) {
			decodedString += '-';
		} 
	} 

	theString = decodedString;
        theString = theString.replace(/\'/gi, '');
        theString = theString.replace(/&/gi, 'and');
        theString = theString.replace(/[^\w\-\+\ ]/gi,'-');
        theString = theString.replace(/\-+/gi, '-');
        theString = theString.replace(/\-$/gi, '');
        theString = theString.replace(/^\-/gi, '');

	return theString;

}

function isValidEmail(email) {
    if ((email==null) || (email.length<6)) {
        return false;
    }
    if (validateCharacters(email)) {
        if (
                (email.indexOf("@") < 1) || (email.lastIndexOf(".") <= email.indexOf("@")) ||
                (email.indexOf("@") == email.length) || (email.indexOf("..") >=0) ||
                 (email.indexOf(".") == email.length)
        ) {
                return false;
        } else {
                return true;
        }
    } else {
                return false;
    }
}

function validateCharacters(email) {
        // replace with regex fanciness at some point
        var isValid = true;
        email = email.toLowerCase();
        var allowed = "0123456789@.+-_abcdefghijklmnopqrstuvwxyz";

        for (var i=0; i < email.length; i++) {
                var next = email.charAt(i);
                if (allowed.indexOf(next) == -1) {
                        isValid = false;
                        break;
                }
        }
        return isValid;
}

