
var Try = {
  these: function() {
    var returnValue;
    var lambda;
    for (var i = 0; i < arguments.length; i++) {
       lambda = arguments[i];
      try {
        returnValue = lambda();
        break;
      } catch (e) {}
    }
    return returnValue;
  }
};

var Utils = {
	
      getXMLRequest:function(){	
      return Try.these(
      function() {return new ActiveXObject('Msxml2.XMLHTTP');},
      function() {return new ActiveXObject('Microsoft.XMLHTTP');},
      function() {return new XMLHttpRequest();}
    ) || false;
  }
};

var Tracker = {
	// format: i
	activity:"id",
	
	isIdThere:function(id){
		var arr = this.activity.split(/:/);
		var len = arr.length;
		var isThere = false;
		for(var i = 0; i  < len ; i++)
		{
			if(	id == arr[i])
			{
				isThere = true;
				return true;
			}				
		}
		
		return isThere;
	},
	
	addId:function(id){
		this.activity += ":"+id;
	}
	
};

var CaptchaHandler = {
	gotIt: false,
	
	getCaptcha: function(){				
		$('captcha_point').src = '/captcha.php?'+Math.random();
	}
};

var RateHandler = {
	xmlReq:Utils.getXMLRequest(),
	idToRate:null,
	action:"",
	
	ratePost:function(id,str){
		
	this.idToRate = id;
	if(Tracker.isIdThere(id))
	{
			RateHandler.displayMsg("Already voted!");
			return;
	}
	
	this.idToRate = id;
	this.action = str;
	
	this.xmlReq.open('GET',"/rate?id="+id +"&action=" + str, true);
	this.xmlReq.onreadystatechange = this.ajaxHandler;

	this.displayLoader();
	this.xmlReq.send(null);		
	},
	
	ajaxHandler: function(){
	var req = RateHandler.xmlReq;	
		if(req.readyState == 1)
		{
					
		}
		else if(req.readyState == 4)
		{
			RateHandler.hideLoader();
			if(req.status == 200)	
			{				
				var arr = req.responseText.split(/:/);
				if(arr[0] == "0")
				{
					RateHandler.displayMsg("Thanks!");	
					RateHandler.updateRating(arr[1]);	
					Tracker.addId(RateHandler.idToRate);
				}
				else if(arr[0] == "1")
				{
						RateHandler.displayMsg("Already voted!");			
				}
				else if(arr[0] == "2")
				{
					//RateHandler.displayMsg("Cookie diabled");
					alert("Please enable cookie functionality and refresh.");
					return;
				}
			}
			else
			{
				RateHandler.displayMsg("Error,try later!");			
			}
		}
	
	},	
	
	displayLoader:function(){
		
		var markup = "ld_"+this.idToRate;
		show(markup);
	},
	
	hideLoader:function(){
		var markup = "ld_"+this.idToRate;
		hide(markup);
	},
	
	displayMsg:function(msg){
		var markup = "RR_"+this.idToRate;
		update(markup,msg);
	},
	
	updateRating:function(newRate)
	{
		var markup = "rating_"+this.idToRate;
		var elem = document.getElementById(markup);
		if(elem == null || elem === undefined)
		{
			return;
		}
		
		elem.innerHTML = newRate;
	}
};
var tagArray = new Array(5);
	// work
	tagArray[0]= ['my boss','promotion','faciliy','bonus','job'];
	tagArray[1]= ['happy','sad','love','affair','parents','wife','relationship','racisim','marriage'];
	tagArray[2]= ['placement','mess food','canteen','academics'];
	tagArray[3]= ['tax','policy','infrastucture','election','politics'];

var TagHandler = {

	tagField: 'tags',
	showingTags: false,
	defaultStr : "','separated tags, its optional",
	isDefault:true,
	showHelp : function(){
		if(!this.showingTags)
		{
			var catg = document.ugall_form.catg.value;
			if(catg == 0)
			{
				alert("You have to select a 'Catagory' for Tag help");
				return;
			}
			else if(catg == 5)
			{
				alert("No Tags to suggest in this category. Please write your tags");
				return;
			}
			catg -= 1;
			this.drawCloud(catg);
			this.showingTags = true;
		}
		else
		{
			this.showingTags = false;
		}
		
		toggleElem('tagHelp');
	},
	
	createTagElem: function(id,arr_id){
		if(id%7 == 0)
		{
				var elem = document.createElement('br');	
		}
		else
		{
			var elemHtml = "<a id='tag_"+arr_id+"@"+id+"'" + "href='javascript://' class='cloud_tag'" +
			" onclick=\"return TagHandler.pickTag('tag_"+arr_id+"@"+id+"');\" style=\"display:''\">";
			elemHtml += tagArray[arr_id][id]+"</a>";
			var elem = document.createElement('span');
			elem.setAttribute('class','clout_tag');
			elem.innerHTML = elemHtml;
		}
		//elem.appendChild();
		$('tagCloud').appendChild(elem);
	},
	
	drawCloud: function(id){		
			$('tagCloud').innerHTML = "";
			
			if(id == 4 ) // if its it just-like-that
			{				
				this.showHelp();							
				return;
			}
			
			for(var i = 0; i < tagArray[id].length; i++)
			{    
				this.createTagElem(i,id);	
			}
			this.showingTags = true;
		
	},
	
	pickTag:function(id){
		
		var tagId = id.split(/_/)[1];
		var arr = tagId.split(/@/);
		var catg = arr[0];
		var index = arr[1];
				
		hide(id);
		var tagStr = tagArray[catg][index];
		if($('tags').value == '' || this.isDefault)
		{
			this.clearText();
			$('tags').value += tagStr;
		}
		else
		{
			$('tags').value += ',' + tagStr;
		}
		return false;
	},
	
	clearText: function()
	{
		if(this.isDefault)
		{
			$(this.tagField).value = '';
			this.isDefault = false;
		}
	},
	
	onCatgChange:function()
	{
		if(!this.isDefault)
		{
			this.clearText();	
		}
		
		if(this.showingTags)
		{
			var catg = document.ugall_form.catg.value;
			if(catg == 0)
			{
				toggleElem('tagHelp');
				this.showingTags = false;
				return;
			}
			catg -= 1;
			this.drawCloud(catg);
		}
	}
	
};

var CommentHandler = {

	xmlReq: Utils.getXMLRequest(),
	postID:null,
	fetchComments: function(id){		
		new Ajax.Updater('comment-content','/fetchComments.php?id='+id);
	},
	
	postComment:function(id){
		var form = $('comment_form');
		this.postID = id;
		if(form.comment.value == "" || form.ugaler.value == "")
		{
			alert("Fill the form!");
			return;
		}
		
		show('loader_post_comment');
		
		this.xmlReq.open('POST','/ugaldo/comment',true);
		var params = $('comment_form').serialize();
		show('loader_post_comment')
		this.xmlReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		this.xmlReq.setRequestHeader("Content-length", params.length);
		this.xmlReq.setRequestHeader("Connection", "close");
		this.xmlReq.onreadystatechange = this.ajaxHandle;
		this.xmlReq.send(params);
		
	},
	
	ajaxHandle: function(){
		var req = CommentHandler.xmlReq;
		
		if(req.readyState == 4)
		{
			hide('loader_post_comment');
			hide('comment-input');
			if(req.status == 200)
			{
				var arr = req.responseText.split(/:/);
					if(arr[0] != '0')
					{
						update('msg',"Oops, some error occured. Please try again");
						window.setTimeout('hide(\'msg\', {duration:3})',2500);	
					}
					else if(arr[0] == '0')
					{
							update('msg',"Thanks for ugaling your comment.");
							window.setTimeout('hide(\'msg\', {duration:3})',2500);	
							CommentHandler.fetchComments(CommentHandler.postID);
					}
			}
			else
			{
					update('msg',"Oops, some error occured. Please try again");
					window.setTimeout('hide(\'msg\', {duration:3})',2500);	
			}
		}
	},
	
	addTracker: function(){
		
		if($('tracker_form').email_id.value == "" || !isEmailId($('tracker_form').email_id.value))
		{
			alert("We can't do without your email ID!");
			return;
		}	
		var req = null;
		if(this.xmlReq.readyState == 4 )
		{
				req = this.xmlReq;
		}
		else
		{
			req = Utils.getXMLRequest();
		}
		
		show('loader_track_post');
		
		req.open("POST","/addTracker.php",true);
		var params = $('tracker_form').serialize();
		req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		req.setRequestHeader("Content-length", params.length);
		req.setRequestHeader("Connection", "close");
		req.onreadystatechange = function(){
				if(req.readyState == 4)
				{
					hide('loader_track_post');
					hide('tracker-input');
					
					var msg = "";
					if(req.status == 200)
					{
						msg = req.responseText;
						var arr = req.responseText.split(/:/);
						if(arr[0] == "0")
						{
							msg = arr[1];				
						}
						else if(arr[0] == '1')
						{					
							msg = arr[1];
						}
					}
					else
					{
						msg = "Oops! some error occured. Please try later.";
					}

					update('msg',msg);
					window.setTimeout('hide(\'msg\', {duration:5})',2500);
				}
		};
		
		req.send(params);
	}
};


function $(){
	  var elements = new Array();

  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);

    if (arguments.length == 1)
      return element;
	}
}



var ugT = 0;
function toggleUgall()
{	
				if(ugT == 0)
				{
					Effect.Fade('c');
					Effect.Appear('input_panel', {duration:2});
					var cFlag = document.ugall_form.cookieFlag.value;	
					hide('xxx');
					if(cFlag == '0')
					{
		
						show('cookieMsg');
					}
					ugT = 1;					
					return false;
				}
				else
				{
					Effect.Fade('input_panel');
					Effect.Appear('c',{duration:2});
					show('xxx');
					ugT = 0;
				}
				return false;
}

function doSubmit()
{
	var form  = document.ugall_form;
	form.submit();
}

  function update(id,str){
	// have to take care of some security issues.
	show(id).innerHTML = str;  
  }
  
 function hide(id){
	  if($(id).style.display != 'none')
	  	$(id).style.display = 'none';
  }
  
function show(id){
    
    if($(id).style.display == 'none')
		$(id).style.display = '';
	return $(id);	
}

function postUgaldo(id)
{
	Effect.Fade('c'); //window.setTimeout('Effect.Appear(\'demo-effect-fade\', {duration:.3})',2500);
	//toggleElem(id);
	//window.setTimeout('Effect.Appear(\'demo-effect-fade\', {duration:.3})',2500);
	Effect.Appear(id, {duration:2});
	var cFlag = document.ugall_form.cookieFlag.value;	
	
	if(cFlag == '0')
	{
		
		show('cookieMsg');
	}
	
	return false;
}

function toggleElem(id)
{
	new Effect.toggle(id, 'slide', {duration: 0.6, transition: Effect.Transitions.sinoidal, from: 0.0, to: 1.0});
//	if($(id).style.display == 'none')
	//	$(id).style.display = '';
	 
	// else if($(id).style.display != 'none')
	  //	$(id).style.display = 'none';
}

var isCaptchaForCommentThere = false;
function displayCommentBox(){
	hide('tracker-input');
	toggleElem('comment-input');

	if(!isCaptchaForCommentThere)
	 {
		 CaptchaHandler.getCaptcha();
		 isCaptchaForCommentThere = true;
	 }
	 else
	 {
		 isCaptchaForCommentThere = false;
	 }
}

function displayTrackerBox()
{
	hide('comment-input');
	toggleElem('tracker-input');
}

function isEmailId (str){
			if(str == null)
			{
				//alert("Please enter valid emailId");
				return false;
			}
			str = trim(str);
			if(str.search(/\s/) != -1)
			{
				//alert("Please enter a valid emaiId");
				return false;
			}
			var p_email = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
			var matches = str.match(p_email);
			if(matches == null || matches[0] != str)
			{
				//alert("Please enter a valid emaiId");
				return false;
			}
			
			
			return true;
			
	}
	
function trim(str)
	{
		str = str.replace(/\s+/g," ");
		str = str.replace(/^\s|\s$/g,"");
		return str;
	}