// global ptr
var validator = null;

// layar namespace
var layar = {
	initHome: function() {
		t = setTimeout(function(){
			$("#rss_holder").html("News is unavailable at this time.");
		}, 30000);
		$("#rss_holder").load('/content/get_rss/', function() {
			clearTimeout(t);
		});
    },

/**
closeMessage: function() {
$('#page_msg').fadeOut();
},

loadLayerDetails: function(name) {
$("#layer_details").load('/account/getlayer/' + name, function() {
$('#layer_edit').show();
$('#layer_list').hide();
layar.allowedActions = eval($('#actions').val());
layar.setActions(layar.allowedActions);
});
},
*/


/**
* Save price tier, load prices for selected and update DOM.
*/
    saveTier: function() {
        $('#tierupdate').show();
        tier = $('#tier').val();
        layerName  = $('#layername').val();
        $("#prices").load('/account/savetier/',
            { tier: tier, layerName: layerName },
            function() {
                $('#tierupdate').hide();
            });
    },

    // Currently not in use
    loadLayerPrices: function() {
        tier = $('#tier').val();
        $("#prices").load('/account/getprices/' + tier)
    },

    allowedActions: [1, 7, 2],

    setStatus: function(element, status, askFirst) {
        $(element).blur();
        if ($.inArray(status, layar.allowedActions) == -1) { return false; }
        if (askFirst) {
            $.fn.colorbox({
                inline: true,
                href: '#freeze_text',
                width: 400,
                scrolling: false
            });
            return;
        }
        $(element).removeClass('bos');
        $(element).addClass('bosa'); // make button active, while doing ajax
        layar.postStatus(status);
    },

    postStatus: function(status) {
        $('#statusupdate').show();
        $.post('/account/updatestatus/',
            {
                'layername': $('#layername').val(),
                'status': status
            },
            function(data) {
                $('#statusupdate').hide();
                if (data.msg) {
                    $.fn.colorbox({
                        html: data.msg,
                        width: 400,
                        height: 125,
                        scrolling: false
                    });
                }
                if (data.result > 0) {
                    $('#layerstatus').html(data.statusMsg);
                    layar.setActions(data.actions);
                }
            },
            'json'
        );
    },

    setActions: function(allowedActions) {
        layar.allowedActions = allowedActions;
        $('#act1').removeClass().addClass('bgs');
        $('#act7').removeClass().addClass('bgs');
        $('#act2').removeClass().addClass('bgs');
        if ($.inArray(1, allowedActions) != -1) {
            $('#act1').removeClass('bgs').addClass('bos');
        }
        if ($.inArray(7, allowedActions) != -1) {
            $('#act7').removeClass('bgs').addClass('bos');
        }
        if ($.inArray(2, allowedActions) != -1) {
            $('#act2').removeClass('bgs').addClass('bos');
        }
    },

    removeViewer: function(element, email) {
        $(element).blur();
        $(element).children().html('Removing...');
        $.post('/account/removeviewer/',
            {
                'layername': $('#layername').val(),
                'email': email
            },
            function(data) {
                if (data.result == 0) {
                    $(element).parent().parent().remove();
                }
            },
            'json'
        );
    },

    addViewer: function() {
        $.fn.colorbox({
            inline: true,
            href: '#viewer_form',
            width: 750,
            scrolling: false
        });
        $(document).bind('cbox_complete', function() {
            $('#viewer_message').val('');
            $('#viewer_email').val('');
            $('#viewer_email').focus();
            validator = $('#form_viewer').validate({
                rules: {
                    'viewer_email': { email: true, required: true }
                },
                showErrors: layar.validator.showErrors,
                submitHandler: function(form) {
                    $('#btn_addviewer').blur();
                    $('#btn_addviewer').children().html('Adding...');
                    $(form).ajaxSubmit({
                        dataType: 'json',
                        success: function(responseJson, statusText, xhr, form) {
                            var email = $('#viewer_email').val();
                            var viewer = '<div class="vw"><div class="vwgreybox">' + email + '</div>' +
                              '<div class="vwbutton"><a href="javascript:;" onclick="layar.removeViewer(this, \'' + email + '\')" class="bbs"><span style="background-color:#f8f8f8">Remove</span></a></div></div>';
                            $('#viewers').append(viewer);
                            $.fn.colorbox.close();
                        }
                    });
                }
            });

        });
    },

    showPriceTiers: function() {
        $.fn.colorbox({
            //iframe: true,
            href: '/account/getpricingmatrix/',
            width: '90%',
            innerHeight: 490,
            title: '(*) Layar will handle all tax obligations (19% VAT) for all sales done by residents of the EU countries.'
        });
    },

    updateLayerProperties: function(layer_name, properties, callback) {
	    if(this.lscoUpdateLock) {
		    return false;
	    }

	    this.lscoUpdateLock = true;
	    setTimeout(function(){layar.lscoUpdateLock = false}, 1000);

	    $.post('/account/layer_update_properties',$.extend({
		    layer_name: layer_name
	    }, properties ),
	    function(data) {
		    if(typeof callback == typeof function(){}) {
			    callback(data);
		    }
	    });
    },

	updateLayerCategory: function(layer_name, cat_id, callback) {
		if(cat_id.length == 0) {
			return false;
		}

		$.post('/account/set_layer_category', {
			layer_name: layer_name,
			cat_id: cat_id
		}, function(data){
			if(typeof callback == typeof function(){}) {
				callback(data);
			}
		});
	},
	
	changeEmail: function() {
		//$('#change_email_form').show();
		$.fn.colorbox({
			inline: true,
			href: '#change_email_form_container',
			width: 680
		});
		
		validator = $('#change_email_form').validate({
			rules: {
				'new_email': { email: true, required: true },
				'new_email_2': { email: true, required: true, equalTo: '#new_email' }
			},
			showErrors: layar.validator.showErrors,
			submitHandler: function(form) {
				$('#btn_addviewer').blur();
				$('#btn_addviewer').children().html('Sending request...');
				$(form).ajaxSubmit({
					dataType: 'json',
					success: function(responseJson, statusText, xhr, form) {
						if(responseJson.result == 'OK') {
							messages.display(
								'A verification email has been sent to ' + $('#new_email').val() + '.<br/>Please click the link inside it to verify your account.', {
									target: 'change_email_form_container',
									replace: true,
									onClose: function() {
										$.fn.colorbox.close();
									}
								}
							)
						} else {
							messages.display(responseJson.reason, { type: 'error', target: 'email_error', onClose: $.fn.colorbox.resize });
						}
						
						$.fn.colorbox.resize();
					}
				});
			}
		});
	},

    changeUsername: function() {
        $('#new_username').val('')
        $.fn.colorbox({
            inline: true,
            href: '#change_username_form_container',
            innerWidth: 400
        });

        validator = $('#change_username_form').validate({
            rules: {
                'username': {required: true, minlength: 4, remote: '/accounts/check_username/', maxlength: 30, regex: '^[a-z0-9]+$' }
            },
            showErrors: layar.validator.showErrors,
            submitHandler: function(form) {
                $('#btn_chg_screename').blur();
                $('#btn_chg_screename').children().html('Sending request...');
                $(form).ajaxSubmit({
                    dataType: 'json',
                    success: function(responseJson, statusText, xhr, form) {
                        if(responseJson.result == 'OK') {
                            $(".username").html(responseJson.username);
                            messages.display(responseJson.message, { type: 'message'})
                            $.fn.colorbox.close();
                        } else {
                            messages.display(responseJson.message, { type: 'error', target: 'msgs', onClose: $.fn.colorbox.resize })
                            $.fn.colorbox.resize();
                        }
                    }
                });
            }
        });
    },

	deleteAccount: function() {
            $('#delete_account_container_msg').html('');
            $.fn.colorbox({
                inline: true,
                href: '#delete_account_container',
                width: 400,
                scrolling: false
            });

            validator = $('#delete_account_form').validate({
                rules: {
                    'confirmation': { confirmed: true, required: true }
                },
                showErrors: layar.validator.showErrors,
                submitHandler: function(form) {
                    $('#btn_delete_account').blur();
                    $(form).ajaxSubmit({
                        dataType: 'json',
                        success: function(responseJson, statusText, xhr, form) {
                            if(responseJson.result == 'OK') {
                                $('#delete_account_container_msg').attr('style','color:green');
                                $('#delete_account_container').html('<p>Your account has been deleted.</p><br/><a href="/" class="bbs"><span style="background-color:#f8f8f8">Continue</span></a>');
                            } else {
                                $('#delete_account_container_msg').attr('style','color:red');
                                $('#delete_account_container_msg').html(responseJson.result);
			    }
                            $.fn.colorbox.resize();
                        }
                    });
                }
            });
	},
	
    initSearchPlaceholder: function() {
        searchDefault = 'Search Layar.com...';
        $('#search').focus(function(e){
            $(this).addClass("active");
            if ($(this).attr("value") == searchDefault) $(this).attr("value", "");
        });
        $('#search').blur(function(e){
            $(this).removeClass("active");
            if ($(this).attr("value") == "") $(this).attr("value", searchDefault);
        });
    },
    
    analyticsTrackOutgoing: function() {
        $('[rel=external]').each(function() {
            $(this).click(function() {
                _gaq.push(['_trackPageview','/outbound/article/' + this.href]);
            });
        });
    }

/*
    saveContactInfo: function(form) {
        var values = {};
        $.each($('#form_contactinfo').serializeArray(), function(i, field) {
            values[field.name] = field.value;
        });
        $.each($('#form_bankinfo').serializeArray(), function(i, field) {
            values[field.name] = field.value;
        });

        $.post('/account/contact', values,
        function(data) {
            console.log(data);
            if (data.fieldErrors && validator) {
                validator.showErrors(data.fieldErrors);
            }
        });

    }
*/
};

// If $.validator isn't available on the page, fall back on an empty object
if($.validator) {
    obj = $.validator.prototype;
} else {
    obj = {};
}

$.extend(obj, layar.validator = {

    // custom showErrors validator method, handles django-style messages
    // (this is a small adaptation from the default: it handles lists.)
    showErrors: function(errors) {
        if(errors) {
            // add items to error list and map
            $.extend( this.errorMap, errors );
            this.errorList = [];
            for ( var name in errors ) {
                if (errors[name].constructor == Array) {
                    for ( var error in errors[name]) {
                        this.errorList.push({
                            message: errors[name][error],
                            element: this.findByName(name)
                        });
                    }
                } else {
                    this.errorList.push({
                        message: errors[name],
                        element: this.findByName(name)
                    });
                }
            }
            // remove items from success list
            //this.successList = $.grep( this.successList, function(element) {
            //    return !(element.name in errors);
            //});
        }
        this.defaultShowErrors();
    },

    // custom submitHandler validator method, handles django-style messages
    submitHandler: function(msgElement, callback) {
        return function(form) {
            $(form).ajaxSubmit({
                dataType: 'json',
                success: function(responseJson, statusText, xhr, form) {
                    result = false;

					//messages.display('Form validation failed.');

                    if (responseJson.formErrors) {
                        $(msgElement).html(responseJson.formErrors).addClass('error');
                    }
                    if (responseJson.formMessages) {
                        $(msgElement).html(responseJson.formMessages).addClass('success');
                        result = true;
                    }
                    if (responseJson.fieldErrors && validator) {
                        validator.showErrors(responseJson.fieldErrors);
                    }

                    if(typeof(callback) == typeof(function(){})) {
                        callback(result);
                    }
                }
            });
        }
    }

	/*,
    showLabel: function(element, message) {
        var label = this.errorsFor( element );
        if ( label.length ) {
            // refresh error/success class
            label.removeClass().addClass( this.settings.errorClass );

            // check if we have a generated label, replace the message then
            label.attr("generated") && label.html(message);
        } else {
            // create label
            label = $("<" + this.settings.errorElement + "/>")
                .attr({"for":  this.idOrName(element), generated: true})
                .addClass(this.settings.errorClass)
                .html(message || "");
            if ( this.settings.wrapper ) {
                // make sure the element is visible, even in IE
                // actually showing the wrapped element is handled elsewhere
                label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();
            }
            if ( !this.labelContainer.append(label).length )
                this.settings.errorPlacement
                    ? this.settings.errorPlacement(label, $(element) )
                    : label.insertAfter(element);
        }

        if(!message && this.settings.messages[element.name].successMessage) {
            label.html(this.settings.messages[element.name].successMessage);
            label.removeClass().addClass( 'valid' );
        }

        this.toShow = $([]).add(label);
    }*/
});

$(document).ready(function(){

    layar.initSearchPlaceholder();
    layar.analyticsTrackOutgoing();

});


