// JavaScript Document
var Abaabo = {};

// W3C DOM 2 Events model
if (document.addEventListener)
{
  Abaabo.addEventListener = function(target, type, listener)
  {
    target.addEventListener(type, listener, false);
  };

  Abaabo.removeEventListener = function(target, type, listener)
  {
    target.removeEventListener(type, listener, false);
  };

  Abaabo.preventDefault = function(event)
  {
    event.preventDefault();
  };

  Abaabo.stopPropagation = function(event)
  {
    event.stopPropagation();
  };
}
// Internet Explorer Events model
else if (document.attachEvent)
{
  Abaabo.addEventListener = function(target, type, listener)
  {
    // prevent adding the same listener twice, since DOM 2 Events ignores
    // duplicates like this
    if (Abaabo._findListener(target, type, listener) != -1) return;

    // listener2 calls listener as a method of target in one of two ways,
    // depending on what this version of IE supports, and passes it the global
    // event object as an argument
    var listener2 = function()
    {
      var event = window.event;

      if (Function.prototype.call)
      {
        listener.call(target, event);
      }
      else
      {
        target._currentListener = listener;
        target._currentListener(event)
        target._currentListener = null;
      }
    };

    // add listener2 using IE's attachEvent method
    target.attachEvent("on" + type, listener2);

    // create an object describing this listener so we can clean it up later
    var listenerRecord =
    {
      target: target,
      type: type,
      listener: listener,
      listener2: listener2
    };

    // get a reference to the window object containing target
    var targetDocument = target.document || target;
    var targetWindow = targetDocument.parentWindow;

    // create a unique ID for this listener
    var listenerId = "l" + Abaabo._listenerCounter++;

    // store a record of this listener in the window object
    if (!targetWindow._allListeners) targetWindow._allListeners = {};
    targetWindow._allListeners[listenerId] = listenerRecord;

    // store this listener's ID in target
    if (!target._listeners) target._listeners = [];
    target._listeners[target._listeners.length] = listenerId;

    // set up Abaabo._removeAllListeners to clean up all listeners on unload
    if (!targetWindow._unloadListenerAdded)
    {
      targetWindow._unloadListenerAdded = true;
      targetWindow.attachEvent("onunload", Abaabo._removeAllListeners);
    }
  };

  Abaabo.removeEventListener = function(target, type, listener)
  {
    // find out if the listener was actually added to target
    var listenerIndex = Abaabo._findListener(target, type, listener);
    if (listenerIndex == -1) return;

    // get a reference to the window object containing target
    var targetDocument = target.document || target;
    var targetWindow = targetDocument.parentWindow;

    // obtain the record of the listener from the window object
    var listenerId = target._listeners[listenerIndex];
    var listenerRecord = targetWindow._allListeners[listenerId];

    // remove the listener, and remove its ID from target
    target.detachEvent("on" + type, listenerRecord.listener2);
    target._listeners.splice(listenerIndex, 1);

    // remove the record of the listener from the window object
    delete targetWindow._allListeners[listenerId];
  };

  Abaabo.preventDefault = function(event)
  {
    event.returnValue = false;
  };

  Abaabo.stopPropagation = function(event)
  {
    event.cancelBubble = true;
  };

  Abaabo._findListener = function(target, type, listener)
  {
    // get the array of listener IDs added to target
    var listeners = target._listeners;
    if (!listeners) return -1;

    // get a reference to the window object containing target
    var targetDocument = target.document || target;
    var targetWindow = targetDocument.parentWindow;

    // searching backward (to speed up onunload processing), find the listener
    for (var i = listeners.length - 1; i >= 0; i--)
    {
      // get the listener's ID from target
      var listenerId = listeners[i];

      // get the record of the listener from the window object
      var listenerRecord = targetWindow._allListeners[listenerId];

      // compare type and listener with the retrieved record
      if (listenerRecord.type == type && listenerRecord.listener == listener)
      {
        return i;
      }
    }
    return -1;
  };

  Abaabo._removeAllListeners = function()
  {
    var targetWindow = this;

    for (id in targetWindow._allListeners)
    {
      var listenerRecord = targetWindow._allListeners[id];
      listenerRecord.target.detachEvent(
          "on" + listenerRecord.type, listenerRecord.listener2);
      delete targetWindow._allListeners[id];
    }
  };

  Abaabo._listenerCounter = 0;
}

Abaabo.addClass = function(target, theClass)
{
  if (!Abaabo.hasClass(target, theClass))
  {
    if (target.className == "")
    {
      target.className = theClass;
    }
    else
    {
      target.className += " " + theClass;
    }
  }
};

Abaabo.getElementsByClass = function(theClass)
{
  var elementArray = [];

  if (document.all)
  {
    elementArray = document.all;
  }
  else
  {
    elementArray = document.getElementsByTagName("*");
  }

  var matchedArray = [];
  var pattern = new RegExp("(^| )" + theClass + "( |$)");

  for (var i = 0; i < elementArray.length; i++)
  {
    if (pattern.test(elementArray[i].className))
    {
      matchedArray[matchedArray.length] = elementArray[i];
    }
  }

  return matchedArray;
};

Abaabo.hasClass = function(target, theClass)
{
  var pattern = new RegExp("(^| )" + theClass + "( |$)");

  if (pattern.test(target.className))
  {
    return true;
  }

  return false;
};

Abaabo.removeClass = function(target, theClass)
{
  var pattern = new RegExp("(^| )" + theClass + "( |$)");

  target.className = target.className.replace(pattern, "$1");
  target.className = target.className.replace(/ $/, "");
};

Abaabo.getComputedStyle = function(element, styleProperty)
{
  var computedStyle = null;

  if (typeof element.currentStyle != "undefined")
  {
    computedStyle = element.currentStyle;
  }
  else
  {
    computedStyle = document.defaultView.getComputedStyle(element, null);
  }

  return computedStyle[styleProperty];
};

Abaabo.start = function(runnable)
{
  Abaabo.addEventListener(window, "load", runnable.init);
};

var Download = 
{
	init: function()
	{
		var btnGetVideo = document.getElementById('btnGetVideo');
		if(btnGetVideo)
		{
			Abaabo.addEventListener(btnGetVideo,"click",Download.ValidateLink);
		}				
	},
	ValidateLink : function()
	{
		var url = document.getElementById('txtUrl').value;
		var newPattern = new RegExp('^http://.*');
		if(!newPattern.test(url))
			url = 'http://'+url;
		var pattern = new RegExp('(youtube|dailymotion|google|metacafe|photobucket|spike|vimeo|stupidvideos)');
		if(pattern.test(url))
						{
							Download.GetVideo(url);
						}
						else
						{
							var span = document.getElementById('iMessage');
							span.innerHTML = 'Abaabo cannot retrieve video from this url. Please check the url or check out our list of Supported Sites';
							span.style.backgroundColor = '#FAE5B0';
						}
		
	},
	GetVideo :function(url)
	{
		var span = document.getElementById('iMessage');
		try
		{
			var requester = new XMLHttpRequest();
		}
		catch (error)
		{
			try
			{
				var requester = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (error)
			{
				var requester = null;
			}
		}
		if(requester!=null)
		{
			var result = this;
			span.style.backgroundColor = '#FAE5B0';
			span.innerHTML = 'Initializing...';
			result._timer = setTimeout(function(){
			var span = document.getElementById('iMessage');
			requester.abort();span.innerHTML = "The server timed out while making your request.";
			},100000);

			requester.open("GET", "download.php?txtUrl="+url, true);
			span.innerHTML = 'Verifying Link...';
			
			requester.onreadystatechange = function()
			{
				if (requester.readyState == 4)
				{
					clearTimeout(result._timer);
					span.innerHTML = 'Downloading...';
					if (requester.status == 200 || requester.status == 304)
					{
						if(requester.responseText == '')
						{
							location.href = 'results.php';
						}
						else if(requester.responseText =='SPIKE')
						{
							location.href = 'results.php?spike=true';
						}
						else
						{
							span.innerHTML = 'An error has occured while retrieving your link. Please check the url or try again later';
						}
					}
					else
					{
						span.innerHTML = "The server was unable to be contacted.";
					}
				}
			};
			requester.send(null);
		}
	}
};
var Faviconize = 
{
	init:function()
	{
		if (!document.getElementsByTagName) return false;
		if (!document.createElement) return false;
  		var links = Abaabo.getElementsByClass('getfavicon');
  		for (var j=0; j<links.length; j++)
		{
	  		var hrefvalue = links[j].href;
			hrefvalue = hrefvalue.replace(/http:\/\/www./,'');
			domain = hrefvalue.replace(/.com\//,'');
			var cue = document.createElement("img");
			cue.className = "faviconimg";
			var cuesrc = "images/favicons/"+domain+".ico";
			cue.setAttribute("src",cuesrc);
			cue.style.marginRight = "2px";
			cue.onerror = function () 
			{
				this.src = "images/external.gif";
			}
			Faviconize.InsertBefore(cue,links[j]);
		}
	},
	InsertBefore:function (newElement,targetElement) 
	{
  		var parent = targetElement.parentNode;
		parent.insertBefore(newElement,targetElement);
	}
};
var DropDown = 
{
	IsDown : false,
	WhichOpen : null,
	MenuClick : false,
	init:function()
	{
		var dropdown = [];
		dropdown = Abaabo.getElementsByClass('mainMenu');
		var subMenu = [];
		subMenu = Abaabo.getElementsByClass('dropdownMenus');
		for(var i=0;dropdown[i];i++)
		{
			Abaabo.addEventListener(dropdown[i],'click',DropDown.Show);
		}
		Abaabo.addEventListener(document,'click',DropDown.HandleDocumentClick);
		for(var i=0; subMenu[i];i++)
		{
			var li = subMenu[i].getElementsByTagName('li');
			for(var j=0;li[j];j++)
			{
				Abaabo.addEventListener(li[j],'mouseover',DropDown.ChangeBackground);
				Abaabo.addEventListener(li[j],'mouseout',DropDown.RestoreBackground);
			}
		}
	},
	HandleDocumentClick : function (event)
	{	
		if(DropDown.IsDown)
		{
			var ul = DropDown.WhichOpen;
			ul.style.display = 'none';
			DropDown.WhichOpen = null;
			DropDown.IsDown = false;
		}
	},
	ChangeBackground : function (event)
	{
		var li = this;
		li.style.backgroundColor = "#3366FF";
        var	a = this.getElementsByTagName('a')[0];
		a.style.color = "#FFFFFF";
		a.style.textDecoration = "none";
	},
	RestoreBackground : function(event)
	{
		this.style.backgroundColor = "#FFFFFF";
		var a = this.getElementsByTagName('a')[0];
		a.style.color = "#3366FF";
		a.style.textDecoration = "none";
	},
	Show:function(event)
	{
		var ul = this.parentNode.getElementsByTagName('ul')[0];
		var openUL;		
		//if a dropdown is already open then close it.
		if(DropDown.IsDown)
		{
			openUL = DropDown.WhichOpen;
			openUL.style.display = 'none';
			DropDown.IsDown = false;
			DropDown.WhichOpen = null;
		}
		if(openUL != ul)
		{
			ul.style.display = 'block';
			this.blur();
			DropDown.IsDown = true;
			DropDown.WhichOpen = ul;
		}
		Abaabo.stopPropagation(event);
		Abaabo.preventDefault(event);
	}
};
var ClickableLogo = 
{
	init:function()
	{
		var logo = document.getElementById('logo_small');
		var txtSearch = document.getElementById('txtSearch');
		if(logo)
			Abaabo.addEventListener(logo,'click',ClickableLogo.ClickListener);
	},
	ClickListener:function()
	{
		location.href = 'index.php';
	}
};
var Share = 
{
	init:function()
	{
		var shareIt = document.getElementById('ShareIt');
		if(shareIt)
		{
			Abaabo.addEventListener(shareIt,'click',Share.DisplayForm);
		}
	},
	DisplayForm:function(event)
	{
		var form = document.getElementById('light');
		Share.GetForm();		
		form.style.display='block';
		document.getElementById('fade').style.display='block';
		Abaabo.preventDefault(event);
	},
	GetForm:function()
	{
		try
		{
			var requester = new XMLHttpRequest();
		}
		catch (error)
		{
			try
			{
				var requester = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (error)
			{
				var requester = null;
			}
		}
		if(requester!=null)
		{
			var result = this;
			result._timer = setTimeout(function(){
			requester.abort();alert('Sorry there is some technical difficulty in sharing');
			},100000);
			var form = document.getElementById('light');
			form.innerHTML = '<img style="top:200px;left:300px;position:absolute" src="images/loading.gif" />';
			requester.open("GET", "xml/sharedForm.php", true);
			requester.onreadystatechange = function()
			{
				if (requester.readyState == 4)
				{
					clearTimeout(result._timer);
					if (requester.status == 200 || requester.status == 304)
					{
						Share.WriteForm(requester.responseXML);
					}
					else
					{
						alert('Sorry there is some technical difficulty in sharing');
					}
				}
			};
			requester.send(null);
		}
	},
	WriteForm:function(responseXML)
	{
		var form = document.getElementById('light');
		var sharedForm = responseXML.getElementsByTagName('html_content')[0];
		var sharedFormValue = sharedForm.firstChild.nodeValue;
		form.innerHTML = sharedFormValue;
		
		var HideIt = document.getElementById('btnCancel');
		if(HideIt)
		{
			Abaabo.addEventListener(HideIt,'click',Share.HideForm);
		}
		var txtUserName = document.getElementById('txtSharedFormYourName');
		var to = document.getElementById('txtSharedFormemails');
		var code = document.getElementById('txtSharedFormVerificationCode');
		var btnSend = document.getElementById('btnSend');
		Abaabo.addEventListener(btnSend,'click',Share.ValidateShareForm);
		if(txtUserName)
		{
			Abaabo.addEventListener(txtUserName,'focus',Share.HideWaterMark);
			Abaabo.addEventListener(txtUserName,'blur',Share.ShowWaterMark);
		}	
		if(to)
		{
			Abaabo.addEventListener(to,'focus',Share.HideWaterMark);
			Abaabo.addEventListener(to,'blur',Share.ShowWaterMark);
		}	
		if(code)
		{
			Abaabo.addEventListener(code,'focus',Share.HideWaterMark);
			Abaabo.addEventListener(code,'blur',Share.ShowWaterMark);
		}
	},
	ValidateShareForm:function(event)
	{
		var txtUserName = document.getElementById('txtSharedFormYourName');
		var to = document.getElementById('txtSharedFormemails');
		var code = document.getElementById('txtSharedFormVerificationCode');
		var username = txtUserName.value;
		var emailAddresses = to.value;
		var barcode = code.value;
		var clear = true;
		if(username == "")
		{
			txtUserName.style.backgroundImage = "url(images/yourname_invalid.jpg)";
			clear = false;
			Abaabo.preventDefault(event);
		}
		if(emailAddresses == "")
		{
			to.style.backgroundImage = "url(images/to_invalid.jpg)";
			clear = false;
			Abaabo.preventDefault(event);
		}
		if(barcode == "")
		{
			code.style.backgroundImage = "url(images/verification_invalid.jpg)";
			clear = false;
			Abaabo.preventDefault(event);
		}
		if(clear)
		{
			Share.SendMail(event);
		}
	},
	SendMail:function(event)
	{
		try
		{
			var requester = new XMLHttpRequest();
		}
		catch (error)
		{
			try
			{
				var requester = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (error)
			{
				var requester = null;
			}
		}
		if(requester!=null)
		{
			var parameters = "submitby=ajax";
			var formElements = [];
			var form = document.getElementById('formData');
			var inputs = form.getElementsByTagName('input');
			var mainForm = document.getElementById('light');
			var img = document.createElement('img');
			img.setAttribute('src','images/loading.gif');
			img.setAttribute('id','loader');
			img.style.position = "absolute";
			img.style.top = "200px";
			img.style.left = "300px";
			img.style.zIndex = "2003";
			mainForm.appendChild(img);
			for(var i=0;inputs[i];i++)
			{
				formElements[formElements.length] = inputs[i];
			}
			for (var i = 0; i < formElements.length; i++)
			{
				var elementName = formElements[i].getAttribute("name");
				if (elementName != null && elementName != "")
				{
					parameters += "&" + elementName + "=" +
					encodeURIComponent(formElements[i].value);
				}
			}
			//requester.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
			requester.open("GET", "processemail.php?"+parameters, true);
			requester.onreadystatechange = function()
			{
				if (requester.readyState == 4)
				{
					if (requester.status == 200 || requester.status == 304)
					{
						Share.WriteEmailResponse(requester.responseXML);
					}
					else
					{
						alert('Sorry there is some technical difficulty in sharing');
					}
				}
			};
			requester.send(null);
			Abaabo.preventDefault(event);
		}
	},
	WriteEmailResponse:function(responseXML)
	{
		var returnCode = responseXML.getElementsByTagName('returncode')[0].firstChild.nodeValue;
		var txtUserName = document.getElementById('txtSharedFormYourName');
		var to = document.getElementById('txtSharedFormemails');
		var code = document.getElementById('txtSharedFormVerificationCode');
		var img = document.getElementById('loader');
		var form = document.getElementById('light');
		form.removeChild(img);
		if(returnCode == "111")
		{

			var a = document.createElement('a');
			a.href = "#";
			Abaabo.addEventListener(a,'click',Share.HideForm);
			var img = document.createElement('img');
			img.setAttribute('src','images/delivered.gif');
			img.style.position = "absolute";
			img.style.top = "0px";
			img.style.zIndex = "2003";
			a.appendChild(img);
			form.appendChild(a);
		}
		else
		{
			if(returnCode == "000")
			{
				txtUserName.value = "";
				to.value = "";
				code.value = "";
				txtUserName.style.backgroundImage = "url(images/yourname_invalid.jpg)";
				to.style.backgroundImage = "url(images/to_invalid.jpg)";
				code.style.backgroundImage = "url(images/verification_invalid.jpg)";
			}
			if(returnCode == "001")
			{
				txtUserName.value = "";
				to.value = "";
				txtUserName.style.backgroundImage = "url(images/yourname_invalid.jpg)";
				to.style.backgroundImage = "url(images/to_invalid.jpg)";
			}
			if(returnCode == "010")
			{
				
				to.value = "";
				to.style.backgroundImage = "url(images/to_invalid.jpg)";
			}
			if(returnCode == "011")
			{
				txtUserName.value = "";
				txtUserName.style.backgroundImage = "url(images/yourname_invalid.jpg)";
			}
			if(returnCode == "100")
			{
				to.value = "";
				code.value = "";
				to.style.backgroundImage = "url(images/to_invalid.jpg)";
				code.style.backgroundImage = "url(images/verification_invalid.jpg)";
			}
			if(returnCode == "101")
			{
				to.value = "";
				to.style.backgroundImage = "url(images/to_invalid.jpg)";
			}
			if(returnCode = "110")
			{
				code.value = "";
				code.style.backgroundImage = "url(images/verification_invalid.jpg)";
			}
		}
	},
	HideWaterMark:function(event)
	{
		var txtUserName = document.getElementById('txtSharedFormYourName');
		var to = document.getElementById('txtSharedFormemails');
		var code = document.getElementById('txtSharedFormVerificationCode');
		if(this.id == "txtSharedFormYourName")
			txtUserName.style.backgroundImage = "none";
		if(this.id == "txtSharedFormemails")
			to.style.backgroundImage = "none";
		if(this.id == "txtSharedFormVerificationCode")
			code.style.backgroundImage = "none";
	},
	ShowWaterMark:function(event)
	{
		var txtUserName = document.getElementById('txtSharedFormYourName');
		var to = document.getElementById('txtSharedFormemails');
		var code = document.getElementById('txtSharedFormVerificationCode');
		if(txtUserName.value == "" && this.id == "txtSharedFormYourName")
			txtUserName.style.backgroundImage = "url(images/yourname.jpg)";
		if(to.value == "" && this.id == "txtSharedFormemails")
			to.style.backgroundImage = "url(images/to.jpg)";
		if(code.value == "" && this.id == "txtSharedFormVerificationCode")
			code.style.backgroundImage = "url(images/verification.jpg)";
		
	},
	HideForm:function(event)
	{
		var form = document.getElementById('light').style.display='none';
		document.getElementById('fade').style.display='none';
		Abaabo.preventDefault(event);
	}
};
var watermark = 
{
	init:function()
	{
		var hpTextBox = Abaabo.getElementsByClass('txtSearchDownload')[0];
		if(hpTextBox)
		{
			hpTextBox.onfocus = function()
			{
				this.style.backgroundImage = 'none';
			}
			hpTextBox.onblur = function()
			{
				if(hpTextBox.value == '')
					this.style.backgroundImage = 'url(images/watermark.gif)';
			}
		}
		var qsTextBox = Abaabo.getElementsByClass('qsTextBox')[0];
		if(qsTextBox)
		{
			qsTextBox.onfocus = function()
			{
				this.style.backgroundImage = 'none';
			}
			qsTextBox.onblur = function()
			{
				if(qsTextBox.value == '')
					this.style.backgroundImage = 'url(images/youtube_watermark.gif)';
			}
		}
		
	}
};
Abaabo.start(watermark);
Abaabo.start(Faviconize);
Abaabo.start(DropDown);
Abaabo.start(Download);
Abaabo.start(ClickableLogo);
Abaabo.start(Share);
