jQuery.fn.fadeToggle = function(speed, easing, callback) {
   return this.animate({opacity: 'toggle'}, speed, easing, callback);
};

jQuery.fn.delay = function(time,func){
	this.each(function(){
		setTimeout(func,time);
	});
	
	return this;
};


$j('document').ready(function(){
    $j("#stype_select").bind("click" , function(){
        $j("#stype_selection").fadeToggle("fast");
    });
    
    $j("#fav").bind("click" , function(){
      parts = $j(this).attr("rel");
      action = $j(this).hasClass("add") ? "add" : "remove";
      remove_class = action == "add" ? "remove" : "add";
      link = this;
      
      $j.ajax({
         'type':"POST",
         'url':'/favorite/' + action + '/' + parts + '/',
         'success':function(msg){
            if(msg == "OK"){
               $j(link).removeClass(action).addClass(remove_class);
               
            }
         }
         
      })
      
    });
    
    
    
    $j("#new_tag_form").bind("submit" , function(ev){
      ev.stopPropagation();
      
      form = $j(this);
      
      name_cont = form.find("#new_tag_name")[0];
      
      
      if (name_cont.value == "") return false;
      found = false;
      
      form.parent().find(".tag_poll .tag").each(function(){
         if(this.textContent == name_cont.value){
            found = true;
            return false;
         }
      });
      
      form.blink = function(msg , cls){
         if (cls != "ok" && cls != "error") cls = "message";
         else cls = "message " + cls;
         
         msg_box = form.next().text(msg).attr("class",cls);
         form.fadeOut("fast" , function(){
            msg_box.fadeIn("fast").delay(5000 , function(){
               msg_box.fadeOut("fast" , function(){
                  form.fadeIn("fast");
               });
            });
         });
         
         /*form.fadeOut("fast").next().text(msg).attr("class",cls).fadeIn("fast").delay(5000 , function(){
            form.next().fadeOut("fast").prev().fadeIn("fast");
         });*/
      }
      
      if(found) return false;
      
      content_type = (form.find("input[name='content_type']")[0]).value;
      object_id = (form.find("input[name='object_id']")[0]).value;
      is_superuser = (form.find("input[name='is_superuser']")[0]).value;
      
      
      $j.ajax({
         'type':'POST',
         'url':'/tags/' + content_type + '-' + object_id + '/',
         'data':{'tag':name_cont.value},
         'success':function(msg){
            if(msg.substring(0,2) == "OK"){
               form.parent().find(".empty").remove();
               
               $j(msg.substring(3 , msg.length).split(";")).each(function(){
                  val = this.replace(">","&gt;").replace("<","&lt;").replace('"',"&quot;");
                  postfix = "";
                  
                  if(is_superuser)
                     postfix = ' <a href="#" onclick="delete_tag(this,'+ content_type +','+ object_id +',\'' + val + '\');">x</a>';
                  
                  form.parent().find(".tag_poll").append('<span class="tag">' + val + postfix + '</span>');
               });
               
               name_cont.value = "";
               form.blink("object tagged");
            } else {
               form.blink(msg , "error");
            }
         }
      })
      //.replace(">","&gt;").replace("<","&lt;").replace('"',"&quot;")
      
      return false;
    });
    
    $j("#tags2>a").bind("click" , function(){
      $j(this).parent().find("#tags-div").fadeToggle("fast");
    })
});

function delete_tag(elm , cont_id , obj_id , tag_name){
   
   
   $j.ajax({
      'type':'POST',
      'url':'/tags/' + cont_id + '-' + obj_id + '/',
      'data':{'dtag':tag_name},
      'success':function(msg){
         
         if(msg == "OK") $j(elm).parent().fadeOut("fast").delay(5000 , function(){
            $j(elm).remove();
         });
         
         else alert(msg);
      }
   });
}

function select_style(type_name){
    $j("#stype")[0].value = type_name;
    $j("#stype_selection").fadeOut("fast");
}

function reload_rss(prd){
    (function(){
        $j(".blogs-ent").load("/?blogs"+(prd?"&prd="+prd:""));
    }).delay(3000);
}

function get_browser() {
	var browser;
    if($j.browser.mozilla)
      browser = "Firefox";
    else if($j.msie)
      browser = "Internet Explorer";
    else if($j.browser.opera)
      browser = "Opera";
    else if($j.browser.safari)
      browser = "Safari";
    else
      browser = "Unknown";
    return(browser);
}

function isValidEmail(email) {
	var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
	return filter.test(email);
}

$j('document').ready(function() {
	var in_glitch = 0;
	
	$j('.glitch_toggle').click(function() {
		var obj = $j('.glitch_inner');
		if(obj.is(':hidden'))
			obj.show('fast');
		else
			obj.hide('fast');
	});
	
	function glitch_success() {
		var obj = $j('.glitch_inner');
		obj.hide('fast', function() {
			obj.html("<div class=\"success\">The glitch reported successfully.</div>");
			obj.show('slow');
		});
	}
	
	function glitch_event() {
		if(!in_glitch) {
			var data = ['Spot a glitch', '', $j('#glitch_email'),
				$j('#glitch_desc'), $j('#glitch_name')];
			var pass = 1;
			
			for(var i=2;i<data.length;i++) {
				var val = data[i].val();
				var d_err = 0;
				
				if(val == '' || val.length < 4)
					d_err = 1;
				else if(i==2 && !isValidEmail(val))
					d_err = 1;
				
				if(d_err)
					pass = 0;
				
				$j('label[for="' + data[i].attr('id') + '"]').css('color', d_err ? 'darkred' : 'black');
			}
			
			if(pass) {
				in_glitch = 1;
				
				data[1] = '\nName: ' + data[4].val() +
					'\nBrowser: ' + get_browser() + ' ' + $j.browser.version + 
					'\nPath: ' + window.location.pathname +
					'\nDescription: ' +  data[3].val();
				$j.ajax({
					'type':'POST',
					'url':'/contact/',
					'data':{'title':data[0], 'content':data[1], 'email':data[2].val()},
					'error': function(e) {
						glitch_success();
					},
					'success':function(msg){
						glitch_success();
					}
				});
			}
		}
		
		return(false);
	}
	
	$j('#glitch_submit').click(function() {
		return(glitch_event());
	});
	
	$j('#glitch_form').submit(function() {
		return(glitch_event());
	});
});
