﻿
$.fn.fieldSerialize = function(successful) {
    var a = [];
    this.each(function() {
        var n = this.name;
        if (!n) return;
        var v = $.fieldValue(this, successful);
        if (v && v.constructor == Array) {
            for (var i=0,max=v.length; i < max; i++)
                a.push({name: n, value: v[i]});
        }
        else if (v !== null && typeof v != 'undefined')
            a.push({name: this.name, value: v});
    });
    //hand off to jQuery.param for proper encoding
    return $.param(a);
};

$.fn.fieldValue = function(successful) {
    for (var val=[], i=0, max=this.length; i < max; i++) {
        var el = this[i];
        var v = $.fieldValue(el, successful);
        if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length))
            continue;
        v.constructor == Array ? $.merge(val, v) : val.push(v);
    }
    return val;
};

$.fieldValue = function(el, successful) {
    var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
    if (typeof successful == 'undefined') successful = true;

    if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
        (t == 'checkbox' || t == 'radio') && !el.checked ||
        (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
        tag == 'select' && el.selectedIndex == -1))
            return null;

    if (tag == 'select') {
        var index = el.selectedIndex;
        if (index < 0) return null;
        var a = [], ops = el.options;
        var one = (t == 'select-one');
        var max = (one ? index+1 : ops.length);
        for(var i=(one ? index : 0); i < max; i++) {
            var op = ops[i];
            if (op.selected) {
                // extra pain for IE...
                var v = $.browser.msie && !(op.attributes['value'].specified) ? op.text : op.value;
                if (one) return v;
                a.push(v);
            }
        }
        return a;
    }
    return el.value;
};

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

function decideView()
{
	if(readCookie('listview'))
	{
		$('.obj').addClass('full');
		$('#views').addClass('alt').html('Vis blok')
	}	
}

//Check if object is array
function isArray(obj) {
   if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}

//Remove "obj_" and "cat_" from string or array
function optimize(obj)
{
	if(isArray(obj))
	{
		for(var i = 0; i < obj.length; i++) obj[i] = obj[i].substring(4,obj[i].length);
		return obj;
	}
	else
		return obj.substring(4,obj.length)
}

//Get the current categoryID
function fetchCategory()
{
	return optimize($('h1.identifier').attr('id')); 
}

function vote()
{
	
	var parent = $(this).parents('.obj').attr("id");
	var childs = $(this).prevAll('div').andSelf();
	
	//Remove on class
	$(this).parent('div .obj-rating').children('div').removeClass('on'); 
	
	//Add on class
	childs.addClass('on');
	
	var rate = childs.size();	
					
	$.post("/Advert/Vote", { advertId: optimize(parent), categoryId: fetchCategory(), rated: rate }, function(result){
			
		if(!result.success)
			alert('Din röst anses vara ogiltig!');
		else
		{
			if(console.log)
				console.log('Vote Ok')
		}		
			
	},"json");
}

function drain()
{
	$('.obj-rating >').removeClass('hover');
}

function hover()
{
	drain();
	$(this).prevAll('div').andSelf().addClass('hover');
}

function tell(){
    alert('send');
}

//DEN SOM VISAR
function tellAFriend(t)
{    
 	jQuery.facebox(function() {
  
	jQuery.get('/User/LoadTellForm/'+t, function(data) {
		jQuery.facebox(data)
		
		//Validation
	    $("#form > form").validate({
	        rules: {
		        yourName: "required",
                friendEmail: {
				    required: true,
				    email: true
			    },
			    yourMessage: "required"
	        },
	        messages: {
		        yourName: "*",
			    friendEmail: {
				    required: "*",
				    email: "*"
			    },
			    yourMessage: "*"
	        }
        });
        
        //Submit form
        $('.tell').submit(function() {
        
        if(!$("#form > form").valid())
            return;
        
        // get params
        var querystring = $('.tell :input').fieldSerialize(); 
        
        querystring += "&advert_id="+t;
        
        // post
        $.post('/User/Tell', querystring, function()
        {
	        $.facebox.close();
        });
                
        // return false to prevent normal browser submit and page navigation
        return false;
        });
		
  		});
	});
}

function subscribe()
{    
    $('#newsbar').click(function() {
    
        jQuery.facebox(function() {
            
            jQuery.get('/Subscribe/Show/', function(data) {
            
                jQuery.facebox(data)
                
                $('#form > form').validate( {
                    rules: {
                        email: {
                            required: true,
                            email: true
                        }
                    },
                    messages: {
                        email: {
                            required: "*",
                            email: "*"
                        }
                    }
                });
                
                $('.sub').submit(function() {
        
                    if(!$("#form > form").valid())
                        return;
        
        
                    var query = $('.sub :input').fieldSerialize(); 
       
                    $.post('/Subscribe/Create', query, function(result)
                    {
                        if(result.success == true)
                            alert('Du är nu med i vårat nyhetsbrev.');
                 
                        if(result.success == false)
                            alert('Något gick fel. Var god försök igen.');
                        
                        if(result.exist == true)
                            alert('Du finns redan med i vårat nyhetsbrev.');
                        
	                    $.facebox.close();
                    },"json");
                            
                    return false;
                });
            });
        });
    });
}

function changeView()
{	
	$('#views').click(function(){	
		
		$('.obj').toggleClass('full');	
		
		var btn = $('#views');
		btn.toggleClass('alt');
		
		if(btn.hasClass('alt'))
		{
			btn.html('Vis blok');
			createCookie('listview',"true",7);
		}
		else
		{
			btn.html('Vis liste');
			eraseCookie('listview');
		}
	});
}

function rating()
{
	$('.obj-rating >').mouseover(hover).mouseout(drain).click(vote);
}

function toggleObjects()
{
	$("#toggle-objects").click(function() {
		$("#nav").slideToggle("fast", function(){
			
			if($("#nav:hidden").length > 0)
				$("#toggle-objects").html('Visa fler kategorier');
			else
				$("#toggle-objects").html('Dölj alla kategorier');	
		});
	});	
}

function navigation()
{
	$("body").bind("click", function(event) {
		
 		if(!$(event.target).is('em'))
		{
			$('#nav ul:first ul:visible').hide();
			$('#nav ul:first a.active').removeClass('active');
		}
		
	});	
	
	$('#nav em').click(function(){
		
		var m=$(this).parents('li').children('ul');
		
		var a = $(this).parents('li').children('a');
		a.toggleClass('active');
		
		m.toggle();
		
		$('#nav ul:first ul:visible').not(m).hide(); //Hide other lists
		$('#nav ul:first a.active').not(a).removeClass('active');
		
		return false;
	
	});
}

function highlightMenu()
{
	$('li:has(a.current)').children('a:first').addClass('current');
}

$(document).ready(function(){
	
	//initialize newsletter subscribe button
    //	newsletter();
    
    subscribe();

	//Add toggle Tags event
	toggleObjects();
	
	///Add View event
	changeView();
	
	//Add submenu event
	navigation();
	
	//Add Rating event
	rating();
	
	//Highlight menu
	highlightMenu();
	
	//Decide view
	decideView();
	
});






