//Client-side timeout
/*if (blnTimeout==true) {
	//1000 milli * 60 sec * 30 min = 1800000 (15 minutes)
	setTimeout('timeout()', 1800000);
}
function timeout() {
	window.location = "/logout.php?action=timedout";
}*/

//add load event
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

// Character Counting and Limiting
var charCountLimitAmount = 140;
function eventCharacterCount() {
	if(!document.getElementById) { return; }
	if(!document.getElementById("displayCharCountMessage")) { return; }

	//id of input field to track
	if(document.getElementById("txtEnterTweet")) { 
		var charCountField = "txtEnterTweet";
	}
	else if(document.getElementById("txtDirectMessage")) { 
		var charCountField = "txtDirectMessage";
	}

	document.getElementById('displayCharCountMessage').innerHTML = "Characters remaining: ";
	document.getElementById('displayCharCountNumber').innerHTML = currentCount;

	updateCharCount(charCountField);

	var theField = document.getElementById(charCountField);
	var currentCount = charCountLimitAmount - theField.value.length;
	theField.onkeyup = function() {
		currentCount = charCountLimitAmount - theField.value.length;
		var el = document.getElementById('displayCharCountNumber');
		el.innerHTML = currentCount;
		//sounds
		if (currentCount==30) {
			soundManager.play('s30');
		}
		else if (currentCount==15) {
			soundManager.play('s15');
		}
		else if (currentCount==5) {
			soundManager.play('s5');
		}
		//red text
		if (currentCount<0) {
			el.className = "alert";
		}
		else {
			el.className = "";
		}
	}
}

//Mark current page on menu
function initMenu() {
	if (thisPage!="m_none") {
		changeMenuClass(thisPage);
	}
}
function changeMenuClass(id, newClass) {
	m=document.getElementById(id);
	m.className="current";
	m.title="current page";
}

//Validate Tweet Entry
function valEnterTweet(){
	if(!document.getElementById) { return; }
	if(!document.getElementById("frmSubmitTweet")) { return; }
	var f=document.getElementById("frmSubmitTweet");
	f.onsubmit = function(){
		var x=document.getElementById("txtEnterTweet");
		var y=x.value.length;
		if (y>140) {
			alert("You must enter less than 140 characters.");
			x.focus();
			return false;
		}
		if (y==0) {
			alert("Please enter your tweet.");
			x.focus();
			return false;
		}
	}
}

//Validate DM Entry
function valDirectMessage(){
	if(!document.getElementById) { return; }
	if(!document.getElementById("frmDirectMessage")) { return; }
	var f=document.getElementById("frmDirectMessage");
	f.onsubmit = function(){
		var t=document.getElementById("tweep");
		var tl=t.value.length;
		if (tl<1) {
			alert("Please enter a Twitter username.");
			t.focus();
			return false;
		}
		var x=document.getElementById("txtDirectMessage");
		var y=x.value.length;
		if (y>140) {
			alert("You must enter less than 140 characters.");
			x.focus();
			return false;
		}
		if (y==0) {
			alert("Please enter a message.");
			x.focus();
			return false;
		}
	}
}

//Validate Sign In form
function valSignin(){
	if(!document.getElementById) { return; }
	if(!document.getElementById("frmSignin")) { return; }
	var f=document.getElementById("frmSignin");
	f.onsubmit = function(){
		var u=document.getElementById("user");
		var p=document.getElementById("password");	
		if (u.value=="") {
			alert("Please enter a username.");
			u.focus();
			return false;
		}
		if (p.value=="") {
			alert("Please enter a password.");
			p.focus;
			return false;
		}
	}
}

//Validate Settings form
function valSettings(){
	if(!document.getElementById("frmSettings")) { return; }
	var f=document.getElementById("frmSettings");
	f.onsubmit = function(){
		var u=document.getElementById("name");
		if (u.value=="") {
			alert("Please enter a name. It is the only required field.");
			u.focus();
			return false;
		}
	}
}
//Validate Settings Avatar form
function valSettingsAvatar(){
	if(!document.getElementById("frmSettingsAvatar")) { return; }
	var f=document.getElementById("frmSettingsAvatar");
	f.onsubmit = function(){
		var u=document.getElementById("avatar");
		if (u.value=="") {
			alert("Please enter a path to the image.");
			u.focus();
			return false;
		}
		//validate against image type
		var v = new RegExp();
		v.compile("(.gif|.GIF|.jpeg|.JPEG|.jpg|.JPG|.png|.PNG)$");
		if (!v.test(u.value)) {
			alert("Invalid file. Only GIF, JPG, and PNG formats are allowed.");
			u.focus();
			return false;
		}
	}
}

//Validate Go to User form
function valGoUser(){
	if(!document.getElementById) { return; }
	if(!document.getElementById("frmGoUser")) { return; }
	var f=document.getElementById("frmGoUser");
	f.onsubmit = function(){
		var u=document.getElementById("goUser");
		if (u.value=="") {
			alert("Please enter a user name.");
			u.focus();
			return false;
		}
	}
}

//Validate search form
function valSearch(){
	if(!document.getElementById) { return; }
	if(!document.getElementById("frmSearch")) { return; }
	var f=document.getElementById("frmSearch");
	f.onsubmit = function(){
		var u=document.getElementById("query");
		if (u.value=="") {
			alert("Please enter search criteria.");
			u.focus();
			return false;
		}
	}
}
//Validate search users
function valSearchUsers(){
	if(!document.getElementById) { return; }
	if(!document.getElementById("frmSearchUsers")) { return; }
	var f=document.getElementById("frmSearchUsers");
	f.onsubmit = function(){
		var u=document.getElementById("queryUsers");
		if (u.value=="") {
			alert("Please enter search criteria.");
			u.focus();
			return false;
		}
	}
}

//Validate Create Lists
function valCreateList(){
	if(!document.getElementById) { return; }
	if(!document.getElementById("frmCreateList")) { return; }
	var f=document.getElementById("frmCreateList");
	f.onsubmit = function(){
		var n=document.getElementById("txt_listName");
		//alert(n);return false;
		if (n.value=="") {
			alert("Please enter a List name.");
			n.focus();
			return false;
		}
		
		nv = n.value;
		var re = new RegExp();
		
		//replace spaces with hyphens
		var nv = nv.replace(/ /gi,'-');
		
		//validate for special characters
		re.compile("[^-a-zA-Z0-9]");

		if ( re.test(nv) ) {
			alert("Sorry, you cannot use special characters. Value: "+nv);
			return false;
		}
		/*else {
			alert("Pass! Value: "+nv);
			return false;
		}*/
		return true;
	}
}

//create titles attrs and functionality for external and email links
function setLinks() {
  if(!document.getElementsByTagName) { return; }
  var anchors = document.getElementsByTagName("a");
  for (var i=anchors.length; i !=0; i--) {
    var a=anchors[i-1];
	if (a.rel.indexOf("external") != -1) {
		a.title += "(external site)"; // (opens in new window)";
		//a.onclick = function(){window.open(this.href);return false;}
	}
	if (a.rel.indexOf("email") != -1) {
		a.title += "(email link)";
	}
  }
}

function initTweetHover() {
	if(!document.getElementsByTagName) { return; }
	var t = $(".box2");
	for (i=0; i<t.length; i++) {
		t[i].onmouseover=function(){
			this.style.borderColor="#fc6";
		}
		t[i].onmouseout=function(){
			this.style.borderColor="#a1d5f9";
		}
	}
	var t = $(".boxReply");
	for (i=0; i<t.length; i++) {
		t[i].onmouseover=function(){
			this.style.borderColor="#fc6";
		}
		t[i].onmouseout=function(){
			this.style.borderColor="#ccc";
		}
	}
	var t = $(".box3");
	for (i=0; i<t.length; i++) {
		t[i].onmouseover=function(){
			this.style.borderColor="#fc6";
		}
		t[i].onmouseout=function(){
			this.style.borderColor="#a1d5f9";
		}
	}
}

function doDirectMessage() {
	if(!document.getElementById) { return; }
	$("a.dmLink").click(function() {
		url = $(this).attr('href');
		arUrl = url.split("direct=");
		usrMix = arUrl[1];
		usr = usrMix.toLowerCase();
		$("#tweep").attr({ 
         	value: usr
		 });
		alert("The user \"" + usr + "\" is entered in the \"username\" text field and the cursor is now active in the message field.");
		$("#txtDirectMessage").focus();
		return false;
	});
}

function doUrlShort() {
	//hide heading with class
	$('#headingShortUrl').addClass('hide');
	
	//hide the content for shortening
	$('#cShortenUrl').hide();
	
	//create link to show content
	$('<p id="cShowShorten"><a href="#" id="aShowShorten">Open Shorten URL &#187;<\/a><\/p>').insertBefore('#cShortenUrl');
	
	//behavior to show/hide content
	$('#aShowShorten').click(function() {
		$('#cShowShorten').hide();
		$('#cShortenUrl').show();
		//$('#urlLong').focus();
		
		//create link to hide content
		$('<p id="cHideShorten"><a href="#" id="aHideShorten">&#171; Hide Shorten URL<\/a><\/p>').insertBefore('#cShortenUrl');
		$('#aHideShorten').focus();
		
		//behavior to hide shortening
		$('#aHideShorten').click(function() {
			$('#cHideShorten').remove();
			$('#cShortenUrl').hide();
			$('#cShowShorten').show();
			$('#aShowShorten').focus();
			return false;
		});
		return false;
	});
	
	//create clear text link
	$('<a href="#" id="urlClear">Clear</a>').insertAfter('#btnShorten');
	//behavior to clear
	$('#urlClear').click(function() {
		$('#urlLong').val("");
		$('#urlShortResult').remove();
		$('#urlLongResult').remove();
	});

	//when submitting
	$("#frmUrlShort").submit(function(ev) {
		ev.preventDefault();		
		var objLongURL = document.getElementById('urlLong');
		var txtLongURL = objLongURL.value;
		//validate for completed field
		if (txtLongURL == "") {
			alert("URL field is blank. Please enter a URL.");
			objLongURL.focus();
			return false;
		}
		//validate for non bit.ly
		var pos = txtLongURL.indexOf("http://bit.ly");
		if (pos != -1) {
			alert("URL cannot be a bit.ly link. Please enter a different URL.");
			objLongURL.focus();
			return false;
		}
		//validate for valid URL
		var v = new RegExp();
		v.compile("^(http)(s?)\:\/\/((www\.)+[a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;=:%\$#_]*)?");
		if ( (!v.test(txtLongURL)) || (txtLongURL.length <=7) ) {
			alert("You must provide a valid URL.");
			return false;
		}
		BitlyCB.alertResponse = function(data) {
			var result;
			for (var r in data.results) {
				result = data.results[r];
				result['longUrl'] = r;
				break;
			}
			if ( result['shortUrl']==null ) {
				alert("Error. Please try again.");
			}
			else {
				//add short URL to Tweet input
				txtInput = $('textarea#txtEnterTweet');
				if ( document.getElementById("txtDirectMessage") ) { 
					txtInput = $('textarea#txtDirectMessage');
				}
				txtInput.val(txtInput.val() + result['shortUrl']);			
				//update counter
				if ( document.getElementById("txtEnterTweet") ) { 
					updateCharCount("txtEnterTweet");
				}
				else {
					updateCharCount("txtDirectMessage");
				}
				//delete existing on page
				$('#urlShortResult').remove();
				$('#urlLongResult').remove();
				//output on page
				$('<div id=\'urlShortResult\'>The shortenend URL is: &nbsp; <strong><a rel=\'external\' href="' + result['shortUrl'] + '">' + result['shortUrl'] + '</a></strong></div>').insertBefore('#frmUrlShort');
				$('<div id=\'urlLongResult\'>The original URL is: &nbsp; <a rel=\'external\' href="' + result['longUrl'] + '">' + result['longUrl'] + '</a></div>').insertAfter('#urlShortResult');
				alert("Success!\r\nThe shortened URL has been added to the input field.\r\nThe shortened URL is: " + result['shortUrl']);
			}
		}
        BitlyClient.call('shorten', {'longUrl': txtLongURL}, 'BitlyCB.alertResponse');
	});
}

function doAddImage() {
	//hide heading with class
	$('#headingAddImage').addClass('hide');
	
	//hide the content
	$('#divAddImage').hide();
	
	//create link to show completed tasks
	$('<p id="cShowAddImage"><a href="#" id="showAddImage">Open Add Image &#187;<\/a><\/p>').insertBefore('#divAddImage');

	//create Ajax parameter in form
	$('<input type="hidden" name="ajax" value="true" />').insertAfter('#pathImage');

	//create div for response
	$('<div id="addImgResponse"></div>').insertBefore('#frmAddImage');

	//behavior to show/hide shortening
	$('#showAddImage').click(function() {
		$('#cShowAddImage').hide();
		$('#divAddImage').show();
		//$('#pathImage').focus(); //doesn't work in some browsers
		//$('#btnAddImg').focus(); 
		
		//create link to hide shortening
		$('<p id="cHideAddImage"><a href="#" id="hideAddImage">&#171; Hide Add Image<\/a><\/p>').insertBefore('#divAddImage');
		$('#hideAddImage').focus(); 
		
		//behavior to hide shortening
		$('#hideAddImage').click(function() {
			$('#cHideAddImage').remove();
			$('#divAddImage').hide();
			$('#cShowAddImage').show();
			$('#showAddImage').focus();
			return false;
		});
		return false;
	});

	//create clear text link
	$('<a href="javascript:;" id="addImgClear">Clear</a>').insertAfter('#btnAddImg');
	//behavior to clear
	$('#addImgClear').click(function() {
		$('#pathImage').val("");
		$('#addImgResponse p').remove();
		$('#btnAddImg').removeAttr("disabled");
	});

	//when submitting
	/*$("#frmAddImage").submit(function(ev) {
		ev.preventDefault();
		var objImgUrl = document.getElementById('pathImage');
		var txtImgUrl = objImgUrl.value;
		
		//validate against blank field
		if (txtImgUrl == "") {
			alert("Path to image is blank. Please enter a path.");
			objImgUrl.focus();
			return false;
		}
		
		//validate against image type
		var v = new RegExp();
		v.compile("(.gif|.GIF|.jpeg|.JPEG|.jpg|.JPG|.png|.PNG)$");
		if (!v.test(txtImgUrl)) {
			alert("Invalid file. Only GIF, JPG, and PNG formats are allowed.");
			return false;
		}
		
		alert(txtImgUrl);
	});*/

	var options = { 
		target:        '#addImgResponse',   // target element(s) to be updated with server response 
		beforeSubmit:  showRequest,  // pre-submit callback 
		success:       showResponse  // post-submit callback 
		
		// other available options: 
		//url:       url         // override for form's 'action' attribute 
		//type:      type        // 'get' or 'post', override for form's 'method' attribute 
		//dataType:  null        // 'xml', 'script', or 'json' (expected server response type) 
		//clearForm: true        // clear all form fields after successful submit 
		//resetForm: true        // reset the form after successful submit 
		
		// $.ajax options can be used here too, for example: 
		//timeout:   3000 
	}; 
	
	// bind form using 'ajaxForm' 
	$('#frmAddImage').ajaxForm(options); 
}
// pre-submit callback 
function showRequest(){//(formData, jqForm, options) { 
	var objImgUrl = document.getElementById('pathImage');
	var txtImgUrl = objImgUrl.value;
	
	//validate against blank field
	if (txtImgUrl == "") {
		alert("Path to image is blank. Please enter a path.");
		objImgUrl.focus();
		return false;
	}
	
	//validate against image type
	var v = new RegExp();
	v.compile("(.gif|.GIF|.jpeg|.JPEG|.jpg|.JPG|.png|.PNG)$");
	if (!v.test(txtImgUrl)) {
		alert("Invalid file. Only GIF, JPG, and PNG formats are allowed.");
		objImgUrl.focus();
		return false;
	}
	
	//create waiting indicator
	$('#btnAddImg').attr("disabled","disabled");
	$('<img src="../images/waiting.gif" alt="processing" id="addImgWaiting" />').insertBefore('#btnAddImg');

    return true;
}
// post-submit callback 
function showResponse(responseText, statusText, xhr, $form)  { 
	//get URL from response text
	var theUrl = "";
	
	if (responseText.indexOf("http") != -1) {
		var p1 = responseText.indexOf("http"); //alert(p1);
		var p2 = responseText.indexOf("\"",p1); //alert(p2);
		var p3 = p2-p1; //alert(p3);
		theUrl = responseText.substr(p1,p3); //string.substr(start,length)
	}

	//add URL to Image to Tweet input
	txtInput = $('textarea#txtEnterTweet');
	if ( document.getElementById("txtDirectMessage") ) { 
		txtInput = $('textarea#txtDirectMessage');
	}
	txtInput.val(txtInput.val() + theUrl);
	
	//update counter
	if ( document.getElementById("txtEnterTweet") ) { 
		updateCharCount("txtEnterTweet");
	}
	else {
		updateCharCount("txtDirectMessage");
	}
	
	//remove waiting indicator
    $('#addImgWaiting').remove();

	//JS alert to user with result
	if (responseText.indexOf("http") != -1) {
		alert("Success!\n\nThe image has been uploaded and added to the input field.\n\nThe URL is: " + theUrl);
	}
	else if (responseText.indexOf("over the limit") != -1) {
		$('#addImgClear').focus();
		alert("The file size of the image is over the limit. It must be under 1 Megabyte.\n\nSelect 'Clear' and try again.");
	}
	//alert('status: ' + statusText + '\n\nresponseText: \n\n' + responseText + '\n\nThe output div should have already been updated.'); 
}


function updateCharCount(charCountField) {
	var theField = document.getElementById(charCountField);
	var currentCount = charCountLimitAmount - theField.value.length;
	currentCount = charCountLimitAmount - theField.value.length;
	var el = document.getElementById('displayCharCountNumber');
	el.innerHTML = currentCount;
	if (currentCount<0) {
		el.className = "alert";
	}
	else {
		el.className = "";
	}
}

function initAtPromoTweet() {
	if(!document.getElementById) { return; }
	if(!document.getElementById("frmSubmitTweet")) { return; }
	//var f=document.getElementById("frmSubmitTweet");
	
	//create the text link
	$('<div id="linkAtPromoTxt"><a href="#" title="insert message with URL and Twitter username">Tweet about Accessible Twitter!<\/a><\/div>').insertBefore('h2.fl');
	
	//capture click
	$("#linkAtPromoTxt").click(function() {
		//define message
		var msg = "Try this superb Twitter web application! http://www.AccessibleTwitter.com @accessibleTwitr #a11y #app";
		
		//insert text into tweet
		txtInput = $('#txtEnterTweet');
		txtInput.val(txtInput.val() + msg);

		//update counter
		updateCharCount("txtEnterTweet");

		//inform user of update
		alert("The following message has been inserted into the tweet input field: \n" + msg);
		$("#txtEnterTweet").focus();

		return false;
	});
}

function doMessage() {
	if(!document.getElementById) { return; }
	$("a[rel='message']").click(function() {
		url3 = $(this).attr('href');
		arUrl3 = url3.split("twmess=");
		usrMix3 = arUrl3[1];
		usr3 = usrMix3.toLowerCase();
		twMessTxt = "@" + usr3 + " ";
		$("#txtEnterTweet").attr({ 
         	value: twMessTxt
		});
		alert("The user \"" + usr3 + "\" is entered in the tweet input field and the cursor is active in that field.");
		$("#txtEnterTweet").focus();
		return false;
	});
}

/*function initTitles() {
	$('a.cluetip').cluetip({
	   splitTitle: '|', 
	   width: 275,
	   dropShadow: true //true
	   });
}*/

addLoadEvent(eventCharacterCount);
addLoadEvent(initMenu);
//addLoadEvent(initReply);
addLoadEvent(valEnterTweet);
addLoadEvent(valDirectMessage);
addLoadEvent(valGoUser);
addLoadEvent(valCreateList);
addLoadEvent(setLinks);
addLoadEvent(initTweetHover);
//addLoadEvent(initTitles);
addLoadEvent(initAtPromoTweet);
addLoadEvent(doDirectMessage);
addLoadEvent(valSearch);
addLoadEvent(valSearchUsers);
//addLoadEvent(doUrlShort); (instead, this call is in the header on the Roll, MyTweets, Direct pages)
//addLoadEvent(doAddImage); (instead, this call is in the header on the Roll, MyTweets, Direct pages)

