$(document).ready(function() {  
	// setup lightbox effect for portfolio
  	$('#slider a').lightBox();	
	
	// display tip-bubble under portfolio images
    $('#slider a img').tipsy();
  	
   	// navigation hover events				
	$('.nav_item').hover(function() {
	    var fade = $('> div', this);			  
	    fade.stop().fadeTo(250, 1);
	}, function () {
	    var fade = $('> div', this);
	    fade.stop().fadeTo(500, 0);
	})  	
  	
  	// navigation click events          
   	$('.nav_item').click(function() { 
   	    var num_cards = 4;
   	    var nav_num = (this.id).split("_");

		if (!$(this).hasClass("active_" + nav_num[1])) {
		    $(".card_content").css("display", "block");  
			   	 	  	    	
	    	for (i=1; i<=num_cards; i++) {
	    		if (i == nav_num[1]) {
  	    		    $("#nav_" + nav_num[1]).removeClass("nav_" + nav_num[1]).addClass("active_" + nav_num[1]);
  	    		    $("#card_" + nav_num[1]).stop()
  	    		        .animate(
  	    		            { left:450 }, {
  	    		                duration: 600,
  	    		                easing: 'easeOutQuad',
  	    		                complete: function() { 
  	    		                    for (i=1; i<=num_cards; i++) { 
  		  	                 			var obj = $('#card_' + i); 
  		  	                 			if(i==nav_num[1]) { obj.css("zIndex",15);	} 
  		  	                 			else if ( obj.css("zIndex") == 15) { obj.css("zIndex",6); } 
  		  	                 			else { obj.css("zIndex",5); }
  		  	                 	    }
  	    		                }
  	    		            })
  	    		        .animate(
  	    		            { left:105 }, {
  	    		                duration: 600,
  	    		                easing: 'easeInQuad'
  	    		            });
  	  	        }
  	  	        else {		  	  	    	
  	    	        $("#nav_" + i).removeClass("active_" + i).addClass("nav_" + i);
  	    	        $("#card_" + i).stop()
  	    		        .animate(
  	    		            { left:-250 }, {
  	    		                duration: 600,
  	    		                easing: 'easeOutQuad'
  	    		            })
  	    		        .animate(
  	    		            { left:105 }, {
  	    		                duration: 600,
  	    		                easing: 'easeInQuad'
  	    		            });
  	  	        }			  	
	    	}  
    	 }			  	    			  	    	
  	});       
      	    
	var num_images = 5;
	var num_companies = 6;
	var pointerexp = 1
	
	function pointer() { this.value = 1; };
	var portfolio_pointer = new pointer();
	var experience_pointer = new pointer();
	
	prevButton = function(pointer, slider_div, location) {
	    this.pointer = pointer;
	    this.animate = function(el){
	        this.pointer.value--;
            if (this.pointer.value <= 1) {
                $(el).css("display","none");
            }    
            $("#" + slider_div).animate({"left": "+=473px"}, 250, function(){
                $("#" + location + "_arrow_next").css("display","block");
            }); 
	    }	        
	}
	
	nextButton = function(pointer, slider_div, location, num_moves) {
	    this.pointer = pointer;
	    this.numMoves = num_moves;
	    this.animate = function(el) {
	        this.pointer.value++;	       
            if (this.pointer.value >= this.numMoves) {
                $(el).css("display","none");
            }    
            $("#" + slider_div).animate({"left": "-=473px"}, 250, function(){
                $("#" + location + "_arrow_prev").css("display","block");
            });     
	    }	    
	}	
    
    var port_pb = new prevButton(portfolio_pointer, "slider", "port");
    var port_nb = new nextButton(portfolio_pointer, "slider", "port", 5);
    
    var exp_pb = new prevButton(experience_pointer, "slider_exp", "exp");
    var exp_nb = new nextButton(experience_pointer, "slider_exp", "exp", 6); 	

	// arrow click events
    $("#port_arrow_prev").click(function(){ port_pb.animate(this); });  
    $("#port_arrow_next").click(function(){ port_nb.animate(this); });
    
    $("#exp_arrow_prev").click(function(){ exp_pb.animate(this); });      
    $("#exp_arrow_next").click(function(){ exp_nb.animate(this); });       


    // contact form submit
	$(".submit").click(function() {
		if (validateForm('contactForm') == "true") {
			var firstName = $("#firstName").val();
			var lastName = $("#lastName").val();
			var email = $("#email").val();
			var dataString = 'firstName='+ firstName + '&lastName=' + lastName + '&email=' + email;
	
			$.ajax({
				type: "POST",
				url: "gdform.asp",
				data: dataString,
				success: function(){

				}
			});
		}
	  	return false;
  	});
});

function validateForm (formToVal) {
    var formData = new formValidationObject();
    formData.getData(formToVal);

    if(formData.hasInvalidEntry)
        return false;
    else 
        return true;
}

function formValidationObject() {
	this.str = new Array();
	this.elem = new Array();
	this.isValidEntry = new Array();
	this.hasInvalidEntry = false;
	this.getData = getData;
	this.validate = validate;
	this.processOrMarkInvalidEntries = processOrMarkInvalidEntries;	
	this.flagInvalidEntries = flagInvalidEntries;
}

function getData(formToVal) {
    var formElems = document.getElementById(formToVal).elements;
    for(i=0; i<formElems.length; i++)
    {        
		var elem = formElems[i].name;
		this.str[elem] = formElems[i].value;
		this.elem[i] = elem;
		// assume data is valid:
		this.isValidEntry[i] = true;
	}
	this.validate();
	this.processOrMarkInvalidEntries(formToVal);
}

function validate()
{
	// validation regular expression for characters that shouldn't appear in a person's name:
	var reJunkChars = /\;|\[|\]|\:|\,|\^|\?|\{|\}|\\|\!|\@|\#|\$|\%|\&|\*|\(|\)|\+|\-$/;
	// to check if a string contains a number:
	var reNums = /\d/;
	// to check if a string contains no numbers:
	var reText = /\D/;
	// to check for valid email:
	var reEmail = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
	
	for (var i = 0; i < this.elem.length; i++)
	{
		switch (this.elem[i])
		{
			case "firstName":
			case "lastName":
			case "comments":
				if (this.str[this.elem[i]] == "" || reJunkChars.test(this.str[this.elem[i]]) || reNums.test(this.str[this.elem[i]]))
				{
					this.isValidEntry[i] = false;
					this.hasInvalidEntry = true;
					break;
				}
				else {
				    this.isValidEntry[i] = true;
					break;
				}
		    case "email":    
				if (this.str[this.elem[i]] == "" || (!reEmail.test(this.str[this.elem[i]])))
				{
					this.isValidEntry[i] = false;
					this.hasInvalidEntry = true;
					break;
				}
				else {
				    this.isValidEntry[i] = true;
					break;
				}
		}
	}
}

function processOrMarkInvalidEntries(formToVal)
{
	if (this.hasInvalidEntry) {
		this.flagInvalidEntries(formToVal);
    }
}

function flagInvalidEntries(formToVal)
{
    if (!$("error")) {
        errorDiv = document.createElement('div');
        errorDiv.setAttribute('id', 'error');
        errorText = document.createTextNode('Please enter or correct the data in the fields highlighted below.');
        errorDiv.appendChild(errorText);
        errorLocation = $(formToVal);
        errorLocation.insertBefore(errorDiv,$(formToVal).firstChild);
    }
    
    for (i=0; i<this.elem.length; i++) {
        if ($(this.elem[i] + "_lbl")){
            var errorElem = $(this.elem[i] + "_lbl");
        
            if(this.isValidEntry[i] == false){            
                errorElem.className = "field_error";
            }
            else {
                errorElem.className = "";
            }
        }
    }
}


