var bmk=new function()
{
	this.init=function()
	{
		if(document.getElementById('socialbar'))
		{
			var shareButton=document.getElementById('socialbar-share-link').getElementsByTagName('a')[0]
			 	,emailButton=document.getElementById('socialbar-email-link').getElementsByTagName('a')[0]
			 	,share=document.getElementById('socialbar-share')
			 	,email=document.getElementById('socialbar-email')
				,bookmarkLinks=document.getElementById('socialbar-links').getElementsByTagName('a')
				,link;
				
			shareButton.onclick=function(e)
			{
				showHide('socialbar-share-link', 'socialbar-share');
				stopBubble(e);
				return false;
			};
			emailButton.onclick=function(e)
			{
				showHide('socialbar-email-link', 'socialbar-email');
				stopBubble(e);
				return false;
			};	

			
			share.style.display="block";
			email.style.display="none";
			if (returnQueryStringParam("socialbarsent") == 'true' || returnQueryStringParam("error") == 'true')
			{
				showHide('socialbar-email-link', 'socialbar-email');
			}	
			
			share.onclick=function(e){stopBubble(e);};	
			email.onclick=function(e){stopBubble(e);};
			
			var correctedURL = getURL();
			
			//add the title to the bookmarking links.
			//amend the submit params to be more helpful - process url to remove url params, bookmarks and index.shtml and add page title.
			var bookmarkLinks = document.getElementById('socialbar-links').getElementsByTagName('a')
			for (var i=0, il=bookmarkLinks.length; i<il; i++) {
				if (bookmarkLinks[i].id == 'socialbar-facebooklink')
				{
					bookmarkLinks[i].href = bookmarkLinks[i].href.split('?u=')[0] + '?u=' + correctedURL; //As face book has different url params treat it seperately
				}
				else
				{
					bookmarkLinks[i].href = bookmarkLinks[i].href.split('url=')[0] + 'url=' + correctedURL + '&title=' + document.title; 
				}
			}
			
			//Add print this page button, as it used JS to work no point having it there for no JS users. 
			var printButton = document.createElement("li");
			printButton.innerHTML = '<a href="#socialbar-print-link" onclick="window.print()"><span>Print this page</span></a>';
			printButton.id = 'socialbar-print-link';
			document.getElementById('socialbar-buttons').appendChild(printButton);
			
			//Add print button to the teasers teaser section if present. Add on click handlers to share and email
			//to replicate main button function.
			var teasers = document.getElementById('socialbar-teaser-buttons');
			if (teasers)
			{
				var printTeaser = document.createElement("li");
				printTeaser.innerHTML = '<a id="socialbar-print-teaser" href="#socialbar-print-teaser" onclick="window.print()"><img src="/ssitools/snaps/socialbar/releases/r1/style/f/buttons-news-16x380.gif" title="Print this page" alt=""/></a>';
				teasers.appendChild(printTeaser);
				
				document.getElementById('socialbar-share-teaser').onclick=function(e)
				{
					showHide('socialbar-share-link', 'socialbar-share');
					stopBubble(e);
					return false;
				};
				document.getElementById('socialbar-email-teaser').onclick=function(e)
				{
					showHide('socialbar-email-link', 'socialbar-email');
					stopBubble(e);
					return false;
				};
				
			}
			
		  	//Add form validation
			form = document.getElementById('socialbar-emailform');
		  	form.onsubmit=function(){return validateForm(form);};
			
			
			//Get digg count based on URL
			digg.initialize("http://www.bbc.co.uk");
			digg.getStories(parseDiggs, null, "", {link:encodeURIComponent(correctedURL)}, null);
			
			//Set the maximum length of the text box field
			setMaxLength(document.getElementById('socialbar-Message'), document.getElementById('socialbar-MessageHint'))
		}
	}
	
	function getURL()
	{
		//trying to ensure that the URL ving bookmarked is always the same by removeing /index.shtml and bookmarks
		var correctedURL = document.URL.split("/index.shtml")[0];
		if (document.URL.split("/index.shtml")[1]){correctedURL = correctedURL + '/' + document.URL.split("/index.shtml")[1].split("#")[0];}
		return correctedURL;
	}
	
	function parseDiggs(data, storyId, extra)
	{
		//add digg count to digg button if available.
		var digglink = document.getElementById('socialbar-digglink').getElementsByTagName('span')[0];
		if (data.stories && digglink)
		{
			digglink.innerHTML = digglink.innerHTML + '<span class="socialbar-digg-count">(' + data.stories[0].diggs + ')</span>';
		}
	}

	function showHide(buttonId, id)
	{
		if (buttonId == 'socialbar-share-link')
		{
			document.getElementById('socialbar-email').style.display = 'none'	
			document.getElementById('socialbar-email-link').className = ''	
		}
		else
		{
			document.getElementById('socialbar-share').style.display = 'none';	
			document.getElementById('socialbar-share-link').className = ''	
		}
		var button = document.getElementById(buttonId);
		button.className == 'on' ? button.className = '':button.className = 'on';
		var elem = document.getElementById(id);
		if(elem.style.display=="block")
		{
			elem.style.display="none";
		}
		else
		{
			elem.style.display="block";
			if (buttonId == 'socialbar-email-link') {document.getElementById('socialbar-EmailRecipient').focus();}
			if (buttonId == 'socialbar-share-link') {document.getElementById('socialbar-facebooklink').focus();}
		}
	}
	
	function returnQueryStringParam(paramName) 
	{
		var queryString = window.location.search.substring(1);
		params = queryString.split("&");
		for (var i=0, il=params.length; i<il; i++) 
		{
			param = params[i].split("=");
			if (param[0] == paramName) 
			{
				return param[1];
			}
		}
	}

	function stopBubble(e)
	{
		if(!e)var e=window.event;
		e.cancelBubble=true;
		if(e.stopPropagation)e.stopPropagation();
	}

	var digg = 
	{
	    functionId: 0,
	    appkey: null,
	    initialize: function(appkey)
	    {
	    	this.appkey = appkey;
	    },

	    createUniqueFunctionName: function()
	    {
		//this.lock();
		return "digg_function" + this.functionId++;
		//this.unlock();
	    },

	    createCbFunction: function(args)
	    {
		var cbName = this.createUniqueFunctionName();
		var cb = args[0];
		var errorCb = args[1];
		args = args.splice(2, args.length - 2);

		window[cbName] = function(data) {
		    args.unshift(data);
		    if (errorCb && data.code)
		    	errorCb.apply(null, args)
		    else
			cb.apply(null, args); 
		};
		return cbName;
	    },

	    sendRequest: function(cbName, event, params)
	    {
		var id = event.join("/");
		var request = "http://services.digg.com/" + id + "?appkey=" + escape(this.appkey) + "&type=javascript&callback=" + cbName;
		if (params)
		    for (var key in params)
			request += '&' + key + '=' + params[key];
		var scr = document.createElement("script");
		scr.type = "text/javascript";
		scr.charset = "utf-8";
		scr.src = request;
		document.getElementsByTagName("head")[0].appendChild(scr);
	    },

	    createApiRequestFunction: function(cbName, eventInfo, paramCount)
	    { 
		return this[cbName] = function()
		{
			var nArg = 0;
			var cb = arguments[nArg++];
			var errorCb = arguments[nArg++];
			var sprintfArgs = [];
			var cbFunctionArgs = [cb, errorCb];
			var event = [];
			for (var i = 0; i < eventInfo.length; i++)
			{
			    if (eventInfo[i] == null)
			    {
				cbFunctionArgs.push(typeof(arguments[nArg]) == 'array' ? arguments[nArg].join(",") : arguments[nArg]);
				event[i] = arguments[nArg++];
			    } else {
			    	event[i] = eventInfo[i];
			    }
			}
			var params = arguments[nArg++];
			var extra = arguments[nArg++];
			cbFunctionArgs.push(extra);
			this.sendRequest(this.createCbFunction(cbFunctionArgs), event, params, extra);
		}
	    }
	};

	digg.createApiRequestFunction("getStories", ['stories', null], 1);
  

	var validator = function() {

	  this.setValue = function(elem) {
	    this.value = elem.value;
	  }

	  this.isRequired = function(){
	    if (this.value.length>0) return true;
	    return false;
	  }

	  this.isEmail = function(email) {
	    return (/^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/).test(email);
	  }

	  this.isBetween = function(min,max) {
	    if (this.value.length >= min && this.value.length <= max) return true;
	    return false;
	 	}

	  this.length = function() {
	    return this.value.length;
	  }
	}



	validator.req = new function() {
	  validator.call(this);
	  this.validate = function() {
	    var message = "";
	    if(!this.isRequired()) return true;
	    return false;
	  }
	}

	validator.email = new function() {
	  validator.call(this);
	  this.validate = function() {
	    var message = "";
	    if(!this.isRequired()) return false;
		var emails = [];
		emails = this.value.split(",");
		for (k in emails)
		{
			if(!this.isEmail(emails[k].replace(" ",""))) return true;	
		}
	    return false;
	  }
	}
	validator.maxlength = new function() {
	  validator.call(this);
	  this.validate = function() {
	    var message = "";
	    if(!this.isBetween(0,1000)) return true;
	    return false;
	  }
	}
	
	function validateField(container)
	{
		var valid = true;  
		inputs = container.getElementsByTagName("input");
		var messages = [];
		for (i in inputs) 
		{
	    	if(document.getElementById(inputs[i].id + '-error')){container.removeChild(document.getElementById(inputs[i].id + '-error'))};
			if(inputs[i].className) 
			{
	      		var classes = [];
	      		var message = [];
	      		classes = inputs[i].className.split(" ");
				for (j in classes) 
				{
	        		var x = validator[classes[j]];
					if (x)
					{
	        			x.setValue(inputs[i]);
						if (x.validate())
						{
							valid = false;
				   			messages.push([inputs[i].id,inputs[i].title]);
						}
	     			}
				}
	    	}
		}
		container.className = "";
		var err = messages.length;
		if(err > 0)
		{
				report = document.createElement('label');
				report.setAttribute('for',messages[0][0]);
				report.className = 'hint'
				report.id = messages[0][0] + '-error'
				report.innerHTML = messages[0][1];
				container.appendChild(report);
				container.className = "error"
		}
		return valid;		
	}

	function validateForm(form)
	{
		document.getElementById('socialbar-submit').dissabled = true;
		var errors = document.getElementById('socialbar-fieldset').getElementsByTagName('p');
		for (var i=0, il=errors.length; i<il; i++)
		{
			document.getElementById('socialbar-fieldset').removeChild(errors[i]);
		}
		
		var valid = true;
		valid = validateField(document.getElementById('socialbar-EmailRecipient-container'));
		valid = validateField(document.getElementById('socialbar-senders-name-container'));
		valid = validateField(document.getElementById('socialbar-EmailSender-container'));
		if (document.getElementById('socialbar-Message-container').className == 'error' || !valid) return false;

		var processing = document.createElement('p');
		processing.className = 'processing';
		processing.innerHTML= 'Your email is being sent.';
		processing.id='socialbar-processing-request'
		document.getElementById('socialbar-fieldset').insertBefore(processing, document.getElementById('socialbar-EmailRecipient-container'));


		if (window.XMLHttpRequest)
		{ // non IE browsers 
		   req = new XMLHttpRequest(); 
		   if (req.overrideMimeType)
		      { req.overrideMimeType('text/xml'); }
		 }
		 else if (window.ActiveXObject)
		{ // IE 
		    try 
		    { req = new ActiveXObject("Msxml2.XMLHTTP"); }
		     catch (e)
		     { try 
		         { req = new ActiveXObject("Microsoft.XMLHTTP"); }
		         catch (e) {}
		      }
		}
		
		var reqURL = document.getElementById('socialbar-emailform').action + '?';
		var inputs = document.getElementById('socialbar-fieldset').getElementsByTagName('input');
		for (var i = 0, il = inputs.length; i < il; i++)
		{
			reqURL += inputs[i].name + '=' + escape(inputs[i].value) + '&';
		}
		
		req.open('GET', reqURL + '&Message=' + document.getElementById('socialbar-Message').value, false); 
		req.send(null);
		if(req.status == 200)
		{
			var container = document.createElement('div');
			container.innerHTML = req.responseText;
			var Content = getHTMLByClass(container, 'error');
			if (Content)
			{
				document.getElementById('socialbar-fieldset').insertBefore(Content, document.getElementById('socialbar-EmailRecipient-container'));
				document.getElementById('socialbar-fieldset').removeChild(document.getElementById('socialbar-processing-request'));
				return false;
			}
			var Content = getHTMLByClass(container, 'success');
			if (Content)
			{
				document.getElementById('socialbar-fieldset').insertBefore(Content, document.getElementById('socialbar-EmailRecipient-container'));
				document.getElementById('socialbar-fieldset').removeChild(document.getElementById('socialbar-processing-request'));
				return false;
			}
			
			
		}
		
	}
	
	
	function getHTMLByClass(element, id) 
	{
		var children = element.childNodes;
	 	for (var i=0, il=children.length;i<il;i++) 
		{
	 		if (children[i].className) 
			{
	 			if (children[i].className == id) 
				{
	 				return children[i];
	 			}	
	 		}
	 		var child = getHTMLByClass(children[i], id);
	 		if (child != null) 
			{
	 			return child;
	 		}
	 	}
	 	return null;
	}
	
	
	function setMaxLength(area, hint) {
		var counter =  document.createElement('span');
		counter.className = 'counter';
		counter.relatedElement = area.nextSibling;
		counter.innerHTML = ', you have entered <span>0</span>.';
		hint.appendChild(counter);
		area.relatedElement = counter.getElementsByTagName('span')[0];
		area.onkeyup = area.onchange = checkMaxLength;
		area.onkeyup();
	}

	function checkMaxLength() {
		var maxLength = 1000;
		var currentLength = this.value.length;
		if (currentLength > maxLength)
			this.parentNode.className = 'error';
		else
			this.parentNode.className = '';
		this.relatedElement.firstChild.nodeValue = currentLength;
		// not innerHTML
	}

	

}



blqOnDomReady(function()
{
	bmk.init();
}); 



