// JavaScript Document

/* Classes */

var Button = Class.create({
	initialize: function(Name, Type, Description, TextColor) {
		this.Name = Name;
		this.Type = Type;
		this.Description = Description;
		this.TextColor = TextColor;
		this.ImageID = "Icon" + Name + "Image";
		this.LinkID = "Link" + Name;
		if (this.Type == "Large") {
			this.SwapImage = "Images/Icons/icon-" + Name.toLowerCase() + "-color.png";
		} else {
			this.SwapImage = "Images/Icons-Small/icon-" + Name.toLowerCase() + "-color.png";
		}
		if (this.Type == "Large") {
			this.OriginalImage = "Images/Icons/icon-" + Name.toLowerCase() + "-bw.png";
		} else {
			this.OriginalImage = "Images/Icons-Small/icon-" + Name.toLowerCase() + "-bw.png";
		}
		this.SnippetFile = "Snippets/" + Name + ".aspx";
		this.Selected = false;
		this.PopupPosition = 0;
	},
	
	Click: function() {
		if ((SelectedButton != null) && (SelectedButton != this)) {
			$(SelectedButton.ImageID).src = SelectedButton.OriginalImage;
			$(SelectedButton.LinkID).style.color = "#333333";
			SelectedButton.Selected = false;
		}
		
		if (this.Selected == false) {
			this.Selected = true;
			var baseURL = window.location.toString().replace("?ShowGraphic=true","");
			baseURL = baseURL.gsub(/\/\w+\.*\w*$/, "/");
			var myAjaxUpdater = new Ajax.Updater("SnippetContent", baseURL + this.SnippetFile, { method: "get", evalScripts: true });
			var imageOffset = $(this.ImageID).cumulativeOffset();
			var popupOffsetLeft = imageOffset[0] - (($("SnippetContent").getDimensions().width - $(this.ImageID).getDimensions().width) / 2);
			var largeMenuOffset = $("LargeMenu").cumulativeOffset();
			
			if (popupOffsetLeft < largeMenuOffset[0] + 4) {
				popupOffsetLeft = largeMenuOffset[0] + 4;
			} else if (popupOffsetLeft > largeMenuOffset[0] + $("LargeMenu").getDimensions().width - $("SnippetContent").getDimensions().width - 38) {
				popupOffsetLeft = largeMenuOffset[0] + $("LargeMenu").getDimensions().width - $("SnippetContent").getDimensions().width - 38;
			}
			$("SnippetContent").style.left = popupOffsetLeft + "px";
			$("SnippetContent").show();
			SelectedButton = this;
			
			// load script
			SelectedButton.loadScript();
		} else {
			this.Selected = false;
			$("SnippetContent").update();
			$("SnippetContent").hide();
			SelectedButton = null;
		}
	},
	
	MouseOver: function() {
		if (this.Selected == false) {
			//this.OriginalImage = $(this.ImageID).src;
			$(this.ImageID).src = this.SwapImage;
		}
		if (this.Type == "Small") {
			var imageOffset = $(this.ImageID).cumulativeOffset();
			var smallMenuOffset = $("SmallMenu").cumulativeOffset();
			$("SmallMenuSelected").update(this.Description);
			
			$("SmallMenuSelected").style.left = ((imageOffset[0] - smallMenuOffset[0])) - (($("SmallMenuSelected").getDimensions().width - $(this.ImageID).getDimensions().width) / 2) + "px";
			$("SmallMenuSelected").style.color = this.TextColor;
		} else {
			if (this.Selected == false) {
				$(this.LinkID).style.color = this.TextColor;
			}
		}
	},
	
	MouseOut: function() {
		//log("selected? " + this.Selected + " Orig: " + this.OriginalImage + " Swap: " + this.SwapImage);
		
		if (this.Type == "Small") {
			//if (SelectedButton.ImageID != this.ImageID) {
			if (this.Selected == false) {
				$(this.ImageID).src = this.OriginalImage;
			} /*else {
				$(this.ImageID).src = this.SwapImage;
			}*/
		} else {
			if (this.Selected == false) {
				$(this.ImageID).src = this.OriginalImage;
			}
		}
		/*
		if (this.Selected == false) {
			$(this.ImageID).src = this.OriginalImage;
		} else {
			$(this.ImageID).src = this.SwapImage;
		}
		*/
		if (this.Type == "Small") {
			if (SelectedButton != null) {
				var selectedButtonOffset = $(SelectedButton.ImageID).cumulativeOffset();
				var smallMenuOffset = $("SmallMenu").cumulativeOffset();
				$("SmallMenuSelected").update(SelectedButton.Description);
				$("SmallMenuSelected").style.left = ((selectedButtonOffset[0] - smallMenuOffset[0])) - (($("SmallMenuSelected").getDimensions().width - $(SelectedButton.ImageID).getDimensions().width) / 2) + "px";
				$("SmallMenuSelected").style.color = SelectedButton.TextColor;
			} else {
				$("SmallMenuSelected").update("&nbsp;");
			}
		} else {
			if (this.Selected == false) {
				$(this.LinkID).style.color = "#333333";
			}
		}
	},
	
	setSelected: function() {
		if ((SelectedButton != null) && (SelectedButton != this)) {
			$(SelectedButton.ImageID).src = SelectedButton.OriginalImage;
			if (SelectedButton.Type == "Small") {
				$("SmallMenuSelected").update("&nbsp;");
			}
			SelectedButton.Selected = false;
		}
		
		if (this.Selected == false) {
			//this.OriginalImage = $(this.ImageID).src;
			$(this.ImageID).src = this.SwapImage;
		}
		
		if (this.Type == "Small") {
			var selectedButtonOffset = $(this.ImageID).cumulativeOffset();
			var smallMenuOffset = $("SmallMenu").cumulativeOffset();
			$("SmallMenuSelected").update(this.Description);
			$("SmallMenuSelected").style.left = ((selectedButtonOffset[0] - smallMenuOffset[0])) - (($("SmallMenuSelected").getDimensions().width - $(this.ImageID).getDimensions().width) / 2) + "px";
			$("SmallMenuSelected").style.color = this.TextColor;
		} else {
			if (this.Selected == false) {
				$(this.LinkID).style.color = this.TextColor;
				//$(this.LinkID).style.fontWeight = "bold";
			}
		}
		
		this.Selected = true;
		SelectedButton = this;
	},
	
	loadScript: function() {
		// place holder. To be overridden after initialization.	
	}
});

var Billboard = Class.create({
	initialize: function(Name, SelectedWidth, VisibleIndex) {
		this.Name = Name;
		this.SelectedWidth = SelectedWidth;
		this.VisibleIndex = VisibleIndex;
		
		this.BillboardItems = $(Name).immediateDescendants();
		this.ItemCount = this.BillboardItems.length;
		this.Width = $(Name).offsetWidth;
		this.ItemWidth = Math.floor((this.Width-this.SelectedWidth)/(this.ItemCount-1));
		var ItemWidth = this.ItemWidth;
		
		for (var i = 0; i < this.ItemCount; i++) {
			if (i == VisibleIndex) {
				this.BillboardItems[i].style.width = this.SelectedWidth + 'px';
				this.BillboardItems[i].setOpacity(1.0);
				this.BillboardItems[i].addClassName("selected");
			} else {
				this.BillboardItems[i].style.width = this.ItemWidth + 'px';
				this.BillboardItems[i].setOpacity(0.5);
			}
			
			/* OnClick event of billboards */
			this.BillboardItems[i].observe("click", function(event) {
				var element = event.element();
				if ((element.identify() == "Billboard1") || (element.identify() == "Billboard2") || (element.identify() == "Billboard3")) {
					// continue
				} else {
					element = element.ancestors()[0];
				}
				
				if (element.hasClassName("selected")) {
					//element.addClassName("click");
					var baseURL = window.location.toString().gsub(/\/\w+\.*\w*$/, "/");
					//log("baseURL: " + baseURL + element.readAttribute("href"));
					window.location = baseURL + element.readAttribute("href");
				} else {
					var elements = $(Name).immediateDescendants();
					for (var j = 0; j < elements.length; j++) {
						if (elements[j].identify() == element.identify()) {
							element.morph("width:" + SelectedWidth + "px;", { duration: 0.6 });
							element.setOpacity(1.0);
							element.addClassName("selected");
						} else {
							elements[j].morph("width:" + ItemWidth + "px;", { duration: 0.6 });
							elements[j].setOpacity(0.5);
							elements[j].removeClassName("selected");
							//elements[j].removeClassName("click");
						}
					}
				}
			});
			
			/* OnMouseover event of billboards */
			this.BillboardItems[i].observe("mouseover", function(event) {
				var element = event.element();
				if (element.style.width == ItemWidth + "px") {
					new Effect.Opacity(element, { from: 0.5, to: 0.8, duration: 0.1 });
				}
			});
			
			/* OnMouseout event of billboards */
			this.BillboardItems[i].observe("mouseout", function(event) {
				var element = event.element();
				if (element.style.width == ItemWidth + "px") {
					new Effect.Opacity(element, { from: 0.8, to: 0.5, duration: 0.1 });
				}
			});
		}
	}
});

var PageFlip = Class.create({
	initialize: function() {
		// no init
	},
	
	MouseOver: function() {
		$("PageFlip").morph("width: 192px; height: 200px;", { duration: 0.5 });
		$("PageFlipImage").morph("width: 192px; height: 200px;", { duration: 0.5 });
	},

	MouseOut: function() {
		$("PageFlip").morph("width: 24px; height: 25px;", { duration: 0.5 });
		$("PageFlipImage").morph("width: 24px; height: 25px;", { duration: 0.5 });
	}
});

var PageFlipHome = Class.create({
	initialize: function() {
		// no init
	},
	
	MouseOver: function() {
		$("PageFlipHome").morph("width: 300px; height: 295px;", { duration: 0.5 });
		$("PageFlipImageHome").morph("width: 300px; height: 316px;", { duration: 0.5 });
	},

	MouseOut: function() {
		$("PageFlipHome").morph("width: 61px; height: 60px;", { duration: 0.5 });
		$("PageFlipImageHome").morph("width: 61px; height: 64px;", { duration: 0.5 });
	}
});

var Expander = Class.create({
	initialize: function(Name, Collapsed, CollapsedHeight, ExpandedHeight) {
		this.Name = Name;
		this.Collapsed = Collapsed;
		this.CollapsedHeight = CollapsedHeight;
		this.ExpandedHeight = ExpandedHeight;
		
		/* OnClick event of expander */
		$(this.Name).observe("click", function(event) {
			var Expander = Name + "Expander";
			if (Collapsed == true) {
				$(Expander).morph("height: " + ExpandedHeight + "px; border: 1px solid #666666; ", { duration: 0.2 });
				Collapsed = false;
			} else {
				$(Expander).morph("height: " + CollapsedHeight + "px; border: 1px solid #ffffff; ", { duration: 0.2 });
				Collapsed = true;
			}
		});
	}
});

var MoreLink = Class.create({
    initialize: function(LinkElement, ContentElement, URL, AppendStartID) {
        this.LinkElement = LinkElement;
        this.ContentElement = ContentElement;
        this.URL = URL;
        this.AppendStartID = AppendStartID;
        
        /* OnClick event of more link */
        $(this.LinkElement).observe("click", function(event) {
            //$(this.ContentElement).insert();
            var newURL = URL;
            if (AppendStartID == true) {
                newURL = URL + intStartID;
            }
            new Ajax.Request(newURL, {
                onSuccess: function(response) {
                    //log("cont el: " + ContentElement + " response: " + response.responseText);
                    $(ContentElement).insert(response.responseText);
                }
            });
        });
    }
});

/* Public variables */
var btnSoftware, btnServices, btnAbout, btnNewsletter, btnTestimonials, btnSuccess, btnSoftTalk, btnArticles, btnEmployment, btnContactUs;
var SelectedButton;
var MainBillboard;
var SelectedBillboardItem;
var PageFlip;
var PageFlipHome;

/* Helper functions */
function loadButtons() {
	btnButton01 = new Button("Button01", "Large", "Accounting Solutions", "#2C6C60");
    btnButton02 = new Button("Button02", "Large", "CRM", "#246673");
    btnButton03 = new Button("Button03", "Large", "Strategic IT Planning", "#1E4166");
    btnButton04 = new Button("Button04", "Large", "Networks and Hardware", "#473078");
    btnButton05 = new Button("Button05", "Large", "Custom Development", "#7D2870");
    btnButton06 = new Button("Button06", "Large", "Resources", "#861D2E");
    btnButton07 = new Button("Button07", "Large", "About Us", "#862E1D");
    btnButton08 = new Button("Button08", "Large", "Newsletter", "#7E5D22");
    btnButton09 = new Button("Button09", "Large", "Employment", "#707F1E");
    btnButton10 = new Button("Button10", "Large", "Contact Us", "#257525");
	
	btnButton00Small = new Button("Button00", "Small", "Home", "#243300");
	btnButton01Small = new Button("Button01", "Small", "Accounting Solutions", "#2C6C60");
    btnButton02Small = new Button("Button02", "Small", "CRM", "#246673");
    btnButton03Small = new Button("Button03", "Small", "Strategic IT Planning", "#1E4166");
    btnButton04Small = new Button("Button04", "Small", "Networks and Hardware", "#473078");
    btnButton05Small = new Button("Button05", "Small", "Custom Development", "#7D2870");
    btnButton06Small = new Button("Button06", "Small", "Resources", "#861D2E");
    btnButton07Small = new Button("Button07", "Small", "About Us", "#862E1D");
    btnButton08Small = new Button("Button08", "Small", "Newsletter", "#7E5D22");
    btnButton09Small = new Button("Button09", "Small", "Employment", "#707F1E");
    btnButton10Small = new Button("Button10", "Small", "Contact Us", "#257525");
	
	PageFlip = new PageFlip();
	PageFlipHome = new PageFlipHome();
}

function hideSageAward() {
	//new Effect.Opacity("SageAward", {duration:1, from:1.0, to:0.0}); //daniell: removed line 2010-04-23
	//Element.hide.delay(1, "SageAward"); //daniell: removed line, added next 2010-04-23
	Element.hide.delay(0, "SageAward");
}

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

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

function openNewWindow(url) { 
	newwindow = window.open(url,'name','width=800,height=600,top=100,left=100,toolbar=yes,menubar=yes,location=yes,scrollbars=yes,resizable=yes'); 
	if (window.focus) {
		newwindow.focus()
	}
}

/* Call this function when the page has been loaded */
function initialize() {
	if ($("SageAward") != undefined) {
		var qs = new Querystring();
		
		if (!qs.contains("ShowGraphic")) {
			if (readCookie("SageAward") != 1) {
				//hideSageAward.delay(2.5); //daniell: removed line, added next 2010-04-23
				hideSageAward.delay(0.0);
				setCookie("SageAward", 1, 1);
			} else {
				Element.hide("SageAward");
			}
		} else {
			$("SageAward").observe("click", function(event) {
				//hideSageAward.delay(0.5); //daniell: removed line, added next 2010-04-23
				hideSageAward.delay(0.0);
			});
		}
	}
	
	loadButtons();
	if ($("SmallMenu") != undefined) {
		loadPage();
	}
	
	if ($("Billboard") != undefined) {
		MainBillboard = new Billboard("Billboard", 675, 0);
	}
	
	MM_preloadImages(
		'Images/Icons/icon-button00-color.png',
		'Images/Icons/icon-button01-color.png',
		'Images/Icons/icon-button02-color.png',
		'Images/Icons/icon-button03-color.png',
		'Images/Icons/icon-button04-color.png',
		'Images/Icons/icon-button05-color.png',
		'Images/Icons/icon-button06-color.png',
		'Images/Icons/icon-button07-color.png',
		'Images/Icons/icon-button08-color.png',
		'Images/Icons/icon-button09-color.png',
		'Images/Icons/icon-button10-color.png',
		
		'Images/Icons-Small/icon-button00-color.png',
		'Images/Icons-Small/icon-button01-color.png',
		'Images/Icons-Small/icon-button02-color.png',
		'Images/Icons-Small/icon-button03-color.png',
		'Images/Icons-Small/icon-button04-color.png',
		'Images/Icons-Small/icon-button05-color.png',
		'Images/Icons-Small/icon-button06-color.png',
		'Images/Icons-Small/icon-button07-color.png',
		'Images/Icons-Small/icon-button08-color.png',
		'Images/Icons-Small/icon-button09-color.png',
		'Images/Icons-Small/icon-button10-color.png'
	);


}
google.setOnLoadCallback(initialize);

/* Misc. Functions from Dreamweaver */
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
 
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
 
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

/* Log Window Function */
/** Replace with:
		function log(message) { } // I.e. a null function
	when deploying. */
var logCount = 0;
function log(message) {
	var useExisting = true;
    if (!log.window_ || log.window_.closed) {
		var win;
		if (useExisting == true) {
			win = window.open("", "DebugLog", "width=400,height=200," +
								  "scrollbars=yes,resizable=yes,status=no," +
								  "location=no,menubar=no,toolbar=no");
		} else {
			win = window.open("", null, "width=400,height=200," +
								  "scrollbars=yes,resizable=yes,status=no," +
								  "location=no,menubar=no,toolbar=no");
		}
        if (!win) {
			return;
		}
		var doc = win.document;
		doc.write("<html><head><title>Debug Log</title><style>body { background: #333333; color: #dddddd; font-family: Courier New, Courier; font-size: 75%; }</style></head>" +
				  "<body></body></html>");
		doc.close();
		log.window_ = win;
    }
    var logLine = log.window_.document.createElement("div");
    logLine.appendChild(log.window_.document.createTextNode((logCount++) + "> " + message));
    log.window_.document.body.appendChild(logLine);
	log.window_.scrollBy(0,50);
}
