YUI({combine: true}).use('node', 'anim', 'io', 'dump', 'json-parse','datasource-get','datasource-jsonschema', function(Y){
var _CMP = {
	getURLPath: function(){
 		var currentURL = window.location.href;
		var split = currentURL.split('/');
        var length = split.length;
            length = length - 1;
		var string = split[length];
			string = string.replace('.php','');
			Y.log("page name: " + string);
		},
    injectCSS: function(HREF){
		this.href = HREF;
		var head = document.getElementsByTagName('head')[0];
		var link = document.createElement('link');
		link.rel = 'stylesheet';
		link.type = 'css/text';
		link.href = this.href;
		head.appendChild(link);
        },
	injectJS: function(SRC){
		this.SRC = SRC;
		var head = document.getElementsByTagName('head')[0];
		var script = document.createElement('script');
		script.type = 'text/javascript';
		script.src = this.SRC;
		head.appendChild(script);	
	},
    insertCorners: function(element){
            this.element = element;
            var target = Y.one(this.element);
			if(target){
                var body = Y.one('div.body');
				var topLeft = document.createElement('span');
				topLeft.className = 'top-left';
				var topRight = document.createElement('span');
				topRight.className = 'top-right';
				var notification = document.createElement('p');
				notification.className = 'notification';
				body.appendChild(notification);
				var myAnim = new Y.Anim({node: notification,to:{top:'-20px'}
				});
				myAnim.set('duration', .7);
				myAnim.on('end', function(){
					this.unsubscribe(this);
					setTimeout(removeNotification, 4000)
				});
				myAnim.run();
				var removeNotification = function(){
					notification.parentNode.removeChild(notification);
				}
				var setDelay = function(){
					target.appendChild(topLeft);
					target.appendChild(topRight);
				}
				setTimeout(setDelay, 1200);
			}
        },
    shakeMeUp: function(element){
			this.element = element;
			if(this.element){
            var myAnim = new Y.Anim({node:this.element,to:{left:'-35px'}});
            myAnim.set('duration', 0.1);
            myAnim.run();
            myAnim.on('end', function(){this.unsubscribe(this);this.setAttrs({to:{left:'0'}});
                this.run();
                var insertCorners = _CMP.insertCorners('.home');
            });
            var setDelay = function(){
                var target = Y.one('p.notification');
                var easeOut = new Y.Anim({node:target,to:{height:'0px'}});
                easeOut.set('duration', .2);
                easeOut.set('easing', Y.Easing.easeOut);
                easeOut.run();
            }
            setTimeout(setDelay, 3000);
			}
        },
    getGoogleAd: function(targetAd, element){
            this.element = element;
            this.element2 = targetAd;
            var target = Y.one(this.element);
            var googleAd = Y.one(this.element2);
            var XY = target.getXY();
            googleAd.setStyle('position', 'absolute');
            googleAd.setStyle('display', 'block');
            googleAd.setXY(XY);
        },
    getNextIndustryArticle: function(URL, element){
            this.URL = URL;            
            var targetURL = this.URL;
            this.element = element;
            var target = Y.one(this.element);
			if(target){
            var overlayTarget = Y.one('div.overlay');            
            var callback = {
                timeout: 4000,
                on: {
                    start: function(){addOverlay();},
                    success: function(x, o,args){
                        var titleTarget = Y.one('div.from span');
                        var dateTarget = Y.one('p.date span');
                        var copyTarget = Y.one('p.description');
                        Y.log("CMP DATA: " + o.responseText);
                        var messages = Y.JSON.parse(o.responseText);
                        var link = messages.link;
                        var title = '<a title="Read Yahoo Article" href="' + link + '">' + messages.title + '</a>';
                        var date = '<a href="' + link + '">' + messages.date + '</a>';
                        var description = '<span class="snippet">article snippet:</span>'+'<a href="' + link + '">' + messages.description + '</a>';
                        titleTarget.set('innerHTML',title);
                        dateTarget.set('innerHTML',date);
                        copyTarget.set('innerHTML',description);
                    },
                    end: function(id, arg){var overlayTarget = Y.one('div.overlay');removeNode(overlayTarget);}
                }
            };
            var getNextArticle = function(e){
                e.preventDefault();
                Y.io(targetURL, callback);
            };
           function removeNode(element){element.remove();}
           function addOverlay(){var insertOverlay = new _CMP.insertOverlay(target.get('parentNode'));}
            target.on("click", getNextArticle);
			}
        },
    getFlickr: function(URL, element, button){
            this.button = button;
            this.element = element;
            this.URL = URL;
            var targetButton = this.button;
            var targetURL = this.URL;
            var target = Y.one(this.element);
			if(target){
				var imgTarget = Y.one(targetButton);
				imgTarget.get('parentNode').set('target','_blank');
				var nextRandom = document.createElement('span');
				nextRandom.className = 'next-random';
				nextRandom.innerHTML = 'N <span>e x t</span> I <span>m a g e</span>';
				target.appendChild(nextRandom);
				var callback = {
					timeout: 7000,
					on: {
						success: function(x, o){
							Y.log("CMP DATA: " + o.responseText);
							var messages = Y.JSON.parse(o.responseText);
							var link = messages.src;
							var setDelay = function(){				
								imgTarget.set('src', link);									
								imgTarget.setAttribute('height', '160');
								imgTarget.setAttribute('width', '240');
								imgTarget.removeAttribute('class');
							}
							setTimeout(setDelay, 1200);
						}
					}
				}
				var getNextFlickr = function(e){
					e.preventDefault();
					imgTarget.set('src', 'img/ajax-loader.gif');
					imgTarget.removeAttribute('height');
					imgTarget.removeAttribute('width');
					imgTarget.setAttribute('class', 'img-center');
					Y.io(targetURL, callback);
				}
                var setClick = Y.one(nextRandom);
				setClick.on("click", getNextFlickr);
			}
        },
    insertOverlay: function(element){
            this.element = element;
            var target = Y.one(this.element);
            var overlayDiv = document.createElement('div');
                overlayDiv.className = 'overlay';
				overlayDiv.innerHTML = 'loading...';
            target.appendChild(overlayDiv);
            return overlayDiv;         
        },
    socialRollOver: function(element){
            this.element = element;
            var targets = Y.all(this.element);
                var rollOverEvent = function(e){
					var eventType = e.type;
					var backgroundPosition = function(){
						if(eventType == 'mouseout'){
						var position = e.currentTarget.getStyle('backgroundPosition');
							var string = position;
							if(typeof(string) == 'string'){
							var split = string.split('px');
								split[0] = parseInt(split[0]); 
								split[1] = parseInt(split[1]);
								split[0] = split[0] + 'px ';
								split[1] = split[1] + 8 + 'px';
								string = split[0] + split[1];
								e.currentTarget.setStyle('backgroundPosition',string);
							}
						}else if(eventType == 'mouseover'){
							var position = e.currentTarget.getStyle('backgroundPosition');						
							var string = position;
							if(typeof(string) == 'string'){
							var split = string.split('px');
								split[0] = parseInt(split[0]); 
								split[1] = parseInt(split[1]);
								split[0] = split[0] + 'px ';
								split[1] = split[1] - 8 + 'px';
								string = split[0] + split[1];
								e.currentTarget.setStyle('backgroundPosition',string);
							}
						}
					}
				
				backgroundPosition(eventType);
				
            }
                 targets.on('mouseover', rollOverEvent);
                 targets.on('mouseout', rollOverEvent);
        },
	anchorTargetFix: function(elements){this.elements = elements;var targets = Y.all(this.elements);targets.set('target','_blank');},
	callTwitterData: function(src){
		function cmptwitter(){alert('hi');}
        this.src = src;
        var documentHead = document.getElementsByTagName('head')[0];
        var newScript = document.createElement('script');
        newScript.type = 'text/javascript';
        newScript.src = this.src;
        documentHead.appendChild(newScript);
    },
	insertTwitter: function(targetElement,src){
		if(targetElement){
		this.src = src;
		if(targetElement){this.target = targetElement;var appendTo = Y.one(this.target);}else{this.target = null;}
		if(this.target != null){
		var targetURL = this.src;
		var twitterContainer = document.createElement('div');
		var cmpTweet = function(theData){
			Y.log('twitter data ' + theData,'info');
			var cmpFeed = theData;
			if (cmpFeed.length > 0){
				if (appendTo != null){
					var errorExists = document.getElementById('twitterErrorMessage');
					if (errorExists != null){
						errorExists.parentNode.removeChild(errorExists);
					}
					var topBackgroundImage = document.createElement('div');
					topBackgroundImage.className = 'top-background';
					topBackgroundImage.innerHTML = '<a href="http://twitter.com/elhorrible/" title="Follow me on Twitter!">El Horrible</a>';					
					var bottomBackgroundImage = document.createElement('div');
					bottomBackgroundImage.className = 'bottom-background';
					bottomBackgroundImage.innerHTML = '<a href="http://twitter.com/elhorrible/" title="Follow me on Twitter!">El Horrible</a>';					
					var twitterContainer = document.createElement('div');
					twitterContainer.className = 'cmp-twitter';
					var twitterListContainer = document.createElement('div');
					twitterListContainer.className = 'entry-listing-container';
					var twitterList = document.createElement('ul');
					twitterList.className = 'entry-listing clearFix';
					var listControl = document.createElement('div');
						listControl.className = 'list-control';
					var lessButton = document.createElement('span');
					var moreButton = document.createElement('span');				
					var lessButton = document.createElement('span');
					var moreButton = document.createElement('span');
					lessButton.className = 'less-tweets in-active';
					lessButton.innerHTML = 'scroll up';
					lessButton.onclick = function(){
						if (cmpFeed.length > '5') {
							var parentContainer = Y.one(this).get('parentNode').get('parentNode');
							var visibleItems = jQuery(this).parent().parent().find('ul.entry-listing li:first-child');
							var listItems = jQuery(twitterList);
							var currentTop = listItems.css('top');
							currentTop = parseFloat(currentTop);
							var currentPosition = visibleItems.offset();
							var parentCurrentPosition = parentContainer.offset();
							var ListTopPositon = parseInt(currentPosition.top);
							var ListPositionLimit = parseInt(parentCurrentPosition.top);
							if (ListTopPositon < ListPositionLimit) {
								currentTop += 220;
								listItems.animate({
									top: currentTop + 'px'
								}, 300);
								moreButton.className = 'more-tweets';
							} else {
								this.className = 'less-tweets in-active-less';
							}
						}
					};
					moreButton.className = 'more-tweets';
					moreButton.innerHTML = 'scroll down';
					moreButton.onclick = function(){
						if(cmpFeed.length>'5'){
							var parentContainer = jQuery(this).parent();
							var visibleItems = jQuery(this).parent().parent().find('ul.entry-listing li:last-child');
							var listItems = jQuery(twitterList);
							var currentTop = listItems.css('top');
								currentTop = currentTop.replace('px','');
								if(currentTop == 'auto'){currentTop='0';};
								currentTop = parseFloat(currentTop);
							var currentPosition = visibleItems.offset();
							var parentCurrentPosition = parentContainer.offset();
							var ListTopPositon = parseInt(currentPosition.top);
							var ListPositionLimit = parseInt(parentCurrentPosition.top);
							if (ListTopPositon > ListPositionLimit){
								currentTop -= 220;
								listItems.animate({
									top: currentTop+'px'
								},300);
								lessButton.className = 'less-tweets active-more';
							}else{
								this.className = 'more-tweets in-active-more';
							}
						}
					};
				twitterContainer.appendChild(topBackgroundImage);			
				listControl.appendChild(lessButton);
				listControl.appendChild(moreButton);
				twitterContainer.appendChild(listControl);
				var firstEntryText = cmpFeed[0].text;
				var firstEntryFrom = cmpFeed[0].from_user;
				var firstEntryTimeStamp = cmpFeed[0].created_at;
				var firstEntryItem = document.createElement('div');
				firstEntryItem.className = 'entry first-entry clearFix';
				var followMeLink = document.createElement('a');
				followMeLink.target = '_blank';
				followMeLink.href = 'http://twitter.com/elhorrible/';
				followMeLink.title = 'Follow me on Twitter!';
				var firstCopyContainer = document.createElement('div');
				firstCopyContainer.className = 'copy-container';
				var firstEntryFromUser = document.createElement('h3');
				firstEntryFromUser.className = 'entry-from';
				firstEntryFromUser.innerHTML = firstEntryFrom;
				firstEntryFromUser.appendChild(followMeLink);
				var firstEntryCopy = document.createElement('p');
				firstEntryCopy.className = 'entry-copy';
				var matchhttp = firstEntryText.match(/(\b(https?|ftp|file):\/\/[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|])/ig);
				if (matchhttp != null && matchhttp != undefined) {
					for (ii = 0; ii < matchhttp.length; ii++) {
						firstEntryText = firstEntryText.replace(matchhttp[ii], '<a target="_blank" href="' + matchhttp[ii] + '">' + matchhttp[ii] + '</a>');
					}
				}
				firstEntryCopy.innerHTML = firstEntryText;
				var firstEntryDate = document.createElement('span');
				firstEntryDate.className = 'entry-date';
				firstEntryTimeStamp = firstEntryTimeStamp.replace('+0000', '');
				firstEntryDate.innerHTML = dateFormat(firstEntryTimeStamp, 'dddd mmmm dS h:MM TT');
				firstCopyContainer.appendChild(firstEntryFromUser);
				firstCopyContainer.appendChild(firstEntryCopy);
				firstCopyContainer.appendChild(firstEntryDate);
				firstEntryItem.appendChild(firstCopyContainer);
				twitterContainer.appendChild(firstEntryItem);
				var state;var order;var entryText;var matchhttp;var match;var matchAt;var entryFrom;var entryHREF;var entryRealHREF;var entryPostedFrom;var entryTo;var entryTimeStamp;var entryListItem;var copyContainer;var entryCopy;var entryFromUser;var entryDate;
				for (i = 1; i < '5'; i++) {
					state = '';
					order = '';
					entryText = cmpFeed[i].text;
					matchhttp = entryText.match(/(\b(https?|ftp|file):\/\/[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|])/ig);
					if (matchhttp != null && matchhttp != undefined) {
						for (ii = 0; ii < matchhttp.length; ii++) {
							entryText = entryText.replace(matchhttp[ii], '<a target="_blank" href="' + matchhttp[ii] + '">' + matchhttp[ii] + '</a>');
						}
					}
					match = entryText.match(/(@\w+)/g);
					matchAt = entryText.match(/(#\w+)/g);
					if (match != null && match != undefined) {
						for (ii = 0; ii < match.length; ii++) {
							entryText = entryText.replace(match[ii], '<a href="http://www.twitter.com/' + match[ii].replace('@', '') + '">' + match[ii] + '</a>');
						}
					}
					if (matchAt != null && matchAt != undefined) {
						for (ii = 0; ii < matchAt.length; ii++) {
							entryText = entryText.replace(matchAt[ii], '<a href="http://www.twitter.com/' + matchAt[ii].replace('#', '') + '">' + matchAt[ii] + '</a>');
						}
					}				
					entryFrom = cmpFeed[i].user.name;
					entryHREF = cmpFeed[i].source;				
					entryPostedFrom = entryHREF;
					entryTo = cmpFeed[i].to_user_id;
					entryTimeStamp = cmpFeed[i].created_at;
					entryTimeStamp.replace(' +0000', entryTimeStamp);
					entryListItem = document.createElement('li');
					entryListItem.className = 'entry ' + ' order-count-' + i;
					copyContainer = document.createElement('div');
					copyContainer.className = 'copy-container';
					entryCopy = document.createElement('p');
					entryCopy.className = 'entry-copy';
					entryCopy.innerHTML = entryText;
					entryFromUser = document.createElement('h3');
					entryFromUser.className = 'entry-from';
					entryFromUser.innerHTML = entryFrom;
					entryDate = document.createElement('span');
					entryDate.className = 'entry-date';
					entryTimeStamp = entryTimeStamp.replace('+0000', '');
					entryDate.innerHTML = dateFormat(entryTimeStamp, 'dddd mmmm dS h:MM TT');
					copyContainer.appendChild(entryFromUser);
					copyContainer.appendChild(entryCopy);
					copyContainer.appendChild(entryDate);
					entryListItem.appendChild(copyContainer);
					twitterList.appendChild(entryListItem);
				}
					twitterListContainer.appendChild(twitterList);
					twitterContainer.appendChild(twitterListContainer);
					appendTo.parentNode.appendChild(twitterContainer);
					twitterContainer.appendChild(bottomBackgroundImage);
				}
			} else {
				var errorExists = document.getElementById('twitterErrorMessage');
					if (errorExists == 'null' || errorExists == null){
						var errorMessage = document.createElement('h5');
						errorMessage.id = 'twitterErrorMessage';
						errorMessage.innerHTML = 'Sorry...having some trouble fetching our tweets.  Please try again shortly.';
						errorMessage.style.color = 'red';
						appendTo.appendChild(errorMessage);
					}
				}
			}
		var config = {
			method: 'GET',
			on: {
				success: cmpTweet
			}
		};
		var transaction = Y.io(targetURL, config);
		}}
    },	
	validateForm: function(element){
		this.element = element;
		var targetForm = Y.one(this.element);
		if(targetForm){
			var submitButton = targetForm.one('button');
			var checkEmail = function(e){var expression = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;return expression.test(e);}
			var checkNotBlank = function(e){var expression = /\S/;return String (e).search(expression)!= -1;};
			var checkPhoneNumber = function(e){var phone2=/^[2-9]\d{2}\-\d{3}\-\d{4}| ^\({1}[2-9]\d{2}\){1}\s?\d{3}\-\d{4}| ^[2-9]\d{2}\s\d{3}\s\d{4}/;if(e.match(phone2)){return true;}else{return false;}};
			var checkURL = function(e){var regexp=/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;return regexp.test(e);};
			var nameValue;
			var submitEvent = function(e){	
			var inputs = targetForm.all('input');
			var check;var par;var parent;
			var insertMessage = function(e){
				this.e=e;
				var target=e;
				var check = target.get('parentNode').one('span.error');
				if(!check){
					var span=document.createElement('span');
					span.className='error';
					span.innerHTML='Ooops! Please check this field :(';
					target.get('parentNode').appendChild(span);
					e.on('focus',function(){
						parent = e.get('parentNode').one('span.error');
						if(parent){parent.remove();}
					});}}
				Y.each(inputs, function(v, k) {
					par = v.get('name');
					if(par === 'first_name'){
						check = checkNotBlank(v.get('value'));
					if(check === false){insertMessage(v);e.preventDefault();}
					}else if(par === 'email'){
						check = checkEmail(v.get('value'));
						if(check === false){insertMessage(v);e.preventDefault();}							
					}
					else if(par === 'company'){
						check = checkNotBlank(v.get('value'));
						if(check === false){insertMessage(v);e.preventDefault();}						
					}
					else if(par === 'last_name'){
						check = checkNotBlank(v.get('value'));
						if(check === false){insertMessage(v);e.preventDefault();}						
					}
					else if(par === 'phone'){
						check = checkPhoneNumber(v.get('value'));
						if(check === false){insertMessage(v);e.preventDefault();}
					}
					else if(par === 'URL'){
						check = checkURL(v.get('value'));
						if(check === false){insertMessage(v);e.preventDefault();}					
					}
				});
			}			
			submitButton.on('click',submitEvent);
		}
	},
	insertGoogleMaps:function(element){
	this.element = element;
	var target = Y.one(this.element);
	if(target){
		var directionsContainer = document.createElement('div');
			directionsContainer.className = 'google-directions';
			directionsContainer.id = 'googleDirections';
		var directionsFrom = document.createElement('input');
		var directionsFromLabel = document.createElement('label');
			directionsFromLabel.innerHTML = 'From:';
			directionsFrom.className = 'google-from';
		var directionsTo = document.createElement('input');
		var directionsToLabel = document.createElement('label');
			directionsToLabel.innerHTML = 'To:';
			directionsTo.className = 'google-to';
		var directionsGet = document.createElement('button');
			directionsGet.innerHTML = 'get directions';
			directionsGet.className = 'get-directions';
			directionsContainer.appendChild(directionsFromLabel);
			directionsContainer.appendChild(directionsFrom);
			directionsContainer.appendChild(directionsToLabel);
			directionsContainer.appendChild(directionsTo);
			directionsContainer.appendChild(directionsGet);
		var trafficButton = document.createElement('button');
			trafficButton.innerHTML = 'Toggle Traffic Info';
			trafficButton.className = 'google-traffic';
		var destination = Y.one('div.examples');
		var googleWrapper = document.createElement('div');
			googleWrapper.className = 'googleWrapper';
		var closeMe = document.createElement('span');
			closeMe.className = 'close-me';
			closeMe.innerHTML = 'close';
			googleWrapper.appendChild(closeMe);
		var newDiv = document.createElement('div');
			googleWrapper.appendChild(directionsContainer);
			googleWrapper.appendChild(newDiv);
			newDiv.className = 'google-div';
			newDiv.id = 'googleMap';
		var loadingDiv = document.createElement('div');
		
			target.on('click',function(){
				loadingDiv.className = 'loading-image';
				loadingDiv.innerHTML = '<img src="img/ajax-loader.gif" />';
				destination.appendChild(loadingDiv);
				destination.appendChild(googleWrapper);
			var centerLat = 40.5436;
			var centerLong = -74.3627;
			var zoomLevel = 11;
			var googleMapDiv = document.getElementById('googleMap');
			var mapOptions = {
				googleBarOptions:{style: "new"}
			}
			var map = new google.maps.Map2(googleMapDiv, mapOptions);
			var location = new google.maps.LatLng(centerLat, centerLong);
				map.setCenter(location, zoomLevel);
				map.addControl(new GMapTypeControl());
				map.addControl(new GSmallZoomControl());
			var trafficOptions = {incidents: true};
			if (GBrowserIsCompatible()) {
				var getDirections = new GDirections(map, directionsContainer);
					directionsGet.onclick = function(){
						getDirections.load("from: " + directionsFrom.value + " to: " + directionsTo.value, {
							"locale": 'en_US'
						});
					}
				var toggleState = 1;
					trafficInfo = new GTrafficOverlay(trafficOptions);
					map.addOverlay(trafficInfo);
			}
				map.enableGoogleBar();
			var initialMarker = new GMarker(location);
				GEvent.addListener(initialMarker, 'click', function(){
			var description = document.createElement('div');
				description.className = 'google-tip';
				description.innerHTML = 'CMP Creations, LLC<br />Google Maps made easy!';
				initialMarker.openInfoWindowHtml(description);
			});
				map.addOverlay(initialMarker);
				trafficButton.onclick = function(){
					if (toggleState == 1) {
						map.removeOverlay(trafficInfo);
						toggleState = 0;
					}
					else {
						map.addOverlay(trafficInfo);
						toggleState = 1;
					}
				}
				googleWrapper.appendChild(trafficButton);
				loadingDiv.parentNode.removeChild(loadingDiv);
				closeMe.onclick = function(){googleWrapper.parentNode.removeChild(googleWrapper);}
			});
		}
	}
};

function init(){
	var filePath = new _CMP.getURLPath();
	var getSkyAd = new _CMP.getGoogleAd('div.ad-sense', 'div.google-ad-sky');
	var get300Ad = new _CMP.getGoogleAd('div.ad-sense.square', 'div.square.target');
	var getNextArticle = new _CMP.getNextIndustryArticle('includes/get-article.php','div.rss button');
	var getNextFlickr = new _CMP.getFlickr('includes/get-flickr.php','p.flickr a.pic','p.flickr img');
	var fixAnchors = new _CMP.anchorTargetFix('ul.social li a');
	var validateForm = new _CMP.validateForm('div.contact form');
	//var injectGoogleMapsJS = new _CMP.injectJS('includes/google-maps.php');
	//var googleMaps = new _CMP.insertGoogleMaps('ul.examples li.google-maps');
}
    Y.on("domready", init);
});