var $j = jQuery.noConflict();

/*
 * jqStripe - Simple alternating stripes with jQuery
 *
 * Copyright (c) 2008 Brice Burgess <bhb@iceburg.net>, http://www.iceburg.net
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 * 
 * $Version: ??/??/???? +r1 beta
 * 
 */
(function($j) {
    $j.fn.jqStripe=function(params){
        var _params = {
            stripeClasses: ['r1', 'r2'],
            rowSelector: 'tr:visible'
        };
        params = $j.extend(_params,params);
        var stripes = params.stripeClasses.length;
        var classes = params.stripeClasses.join(' ');
        return this.each(function(){
            $j(params.rowSelector,this).each(function(i){
                $j(this)
                .removeClass(classes)
                .addClass(params.stripeClasses[i % stripes]);
            });
        });
    };
})(jQuery);



/**
 * @author trixta
 */
(function($j){

    $j.bind = function(object, method){
        var args = Array.prototype.slice.call(arguments, 2);
        return function() {
            var args2 = [this].concat(args, $j.makeArray( arguments ));
            return method.apply(object, args2);
        };
    };
	
})(jQuery);

/* Copyright (c) 2006 Brandon Aaron (http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * $LastChangedDate: 2007-07-21 18:45:56 -0500 (Sat, 21 Jul 2007) $
 * $Rev: 2447 $
 *
 * Version 2.1.1
 */
 
(function($){
    $.fn.bgIframe=$.fn.bgiframe=function(s){
        if($.browser.msie&&/6.0/.test(navigator.userAgent)){
            s=$.extend({
                top:'auto',
                left:'auto',
                width:'auto',
                height:'auto',
                opacity:true,
                src:'javascript:false;'
            },s||{});var prop=function(n){
                return n&&n.constructor==Number?n+'px':n;
            },html='<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+s.src+'"'+'style="display:block;position:absolute;z-index:-1;'+(s.opacity!==false?'filter:Alpha(Opacity=\'0\');':'')+'top:'+(s.top=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\')':prop(s.top))+';'+'left:'+(s.left=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\')':prop(s.left))+';'+'width:'+(s.width=='auto'?'expression(this.parentNode.offsetWidth+\'px\')':prop(s.width))+';'+'height:'+(s.height=='auto'?'expression(this.parentNode.offsetHeight+\'px\')':prop(s.height))+';'+'"/>';return this.each(function(){
                if($('> iframe.bgiframe',this).length==0)this.insertBefore(document.createElement(html),this.firstChild);
            });
        }return this;
    };
})(jQuery);


/*
 * Natural Sort algorithm for Javascript
 *  Version 0.2
 * Author: Jim Palmer (based on chunking idea from Dave Koelle)
 * Released under MIT license.
 */
function naturalSort (a, b) {
    // setup temp-scope variables for comparison evauluation
    var x = a.toString().toLowerCase() || '', y = b.toString().toLowerCase() || '',
    nC = String.fromCharCode(0),
    xN = x.replace(/([-]{0,1}[0-9.]{1,})/g, nC + '$1' + nC).split(nC),
    yN = y.replace(/([-]{0,1}[0-9.]{1,})/g, nC + '$1' + nC).split(nC),
    xD = (new Date(x)).getTime(), yD = (new Date(y)).getTime();
    // natural sorting of dates
    if ( xD && yD && xD < yD )
        return -1;
    else if ( xD && yD && xD > yD )
        return 1;
    // natural sorting through split numeric strings and default strings
    for ( var cLoc=0, numS = Math.max( xN.length, yN.length ); cLoc < numS; cLoc++ )
        if ( ( parseFloat( xN[cLoc] ) || xN[cLoc] ) < ( parseFloat( yN[cLoc] ) || yN[cLoc] ) )
            return -1;
        else if ( ( parseFloat( xN[cLoc] ) || xN[cLoc] ) > ( parseFloat( yN[cLoc] ) || yN[cLoc] ) )
            return 1;
    return 0;
}

function attachColorPicker(element, color) {
    $j(element).ColorPicker({
        color: color,
        onSubmit: function(hsb, hex, rgb) {
            $j(element).val(hex);
        },
        onBeforeShow: function () {
            $j(this).ColorPickerSetColor(this.value);
        }
    }).bind('keyup', function(){
        $j(this).ColorPickerSetColor(this.value);
    });
}

function addLimitedContentPart() {
    var content_part = $j('#hidden_content_part').clone();
    var counter = $j('#counter');

    $j('#contest_limited_content').append(content_part);
    content_part.show();
    content_part.attr('id', 'content_part');

    $j('select', content_part).each(function() {
        this.name = this.name + '[' + counter.val() + ']';
    });
    $j('input', content_part).each(function() {
        this.id = this.name = this.name + '[' + counter.val() + ']';
    }).val(1);

    counter.val(parseInt(counter.val()) + 1);
}

function addUnlimitedContentPart() {
    var content_part = $j('#hidden_content_part').clone();
    var counter = $j('#counter');

    $j('#contest_unlimited_content').append(content_part);
    content_part.css('display', 'block');
    content_part.attr('id', 'content_part');

    $j('#content_part_limit', content_part).parent().hide();
    $j('#content_part_distribution', content_part).parent().hide();

    $j('select', content_part).each(function() {
        this.name = this.name + '[' + counter.val() + ']';
    });
    $j('input', content_part).each(function() {
        this.id = this.name = this.name + '[' + counter.val() + ']';
    });

    counter.val(parseInt(counter.val()) + 1);
}

function removeContentPart(object) {
    $j(object).parent().parent().remove();
}

function flash_notice() {
    $j('.flashNotice').prepend('<div class="fllefttop"></div><div class="flrighttop"></div><div class="flleftbottom"></div><div class="flrightbottom"></div>');
}

$j(document).ready(function() {

    jQuery.fn.dataTableExt.oSort['natural-asc']  = function(a,b) {
        return naturalSort(a,b);
    }

    jQuery.fn.dataTableExt.oSort['natural-desc'] = function(a,b) {
        return naturalSort(a,b) * -1;
    }

    jQuery.fn.dataTableExt.oSort['date-asc'] = function(a,b) {
        if (a > b) return 1;
        else if (a < b) return -1;
        return 0;
    }

    jQuery.fn.dataTableExt.oSort['date-desc'] = function(a,b) {
        if (a > b) return -1; 
        else if (a < b) return 1;
        return 0;
    }

    $j.validator.addMethod('login', function (value) {
        return /^[0-9a-zA-Z\-\_]*$/.test(value);
    }, 'Please enter a valid login.');
    $j.validator.addMethod('hotspotName', function (value) {
        return /^[0-9a-zA-Z\s\.\_\!\-\u0590-\u05FF\u0400-\u04FF\u0600-\u06FF\u0370-\u03FF\u0530-\u058F\u0100-\u0180]*$/.test(value);
    }, 'Please enter a valid hotspot name.');
    $j.validator.addMethod('macAddress', function (value) {
        return /^[0-9A-F]{12}$/.test(value);
    }, 'Please enter a valid MAC address using XXXXXXXXXXXX format.');
    $j.validator.addMethod('contentName', function (value) {
        return /^[0-9a-zA-Z\s\_\-\u0590-\u05FF\u0400-\u04FF\u0600-\u06FF\u0370-\u03FF\u0530-\u058F\u0100-\u0180]*$/.test(value);
    }, 'Please enter a valid content name.');
    $j.validator.addMethod('colorHex', function (value) {
        return /^[0-9a-fA-F]{6}$/.test(value);
    }, 'Please enter a valid<br /> color in HEX format.');

    $j.validator.messages['url'] = "Please enter valid URL (e.g. http://example.com).";

    var snValidationResult = {};
    $j.validator.addMethod('sn', function (value) {
        if (snValidationResult[value] == null) {
            snValidationResult[value] = false;
            jQuery.ajax({
                url: '/hotspots/check_sn/'+ value,
                success: function(result) {
                    snValidationResult[value] = (result == '1');
                },
                async:   false
            });
        }
        return snValidationResult[value];
    }, 'Please enter a valid serial number.');

    $j('form').each(function() {
        $j(this).validate();
    });

    // layouts/application.rhtml
    $j('#act_as_user_id').change(function() {
        $j(this).parent().submit();
    });
    flash_notice();

    // hotspots/_form.rhtml
    // campaigns/new.rhtml
    $j('.ttWrapper').bgiframe();

    // campaigns/show.rhtml
    $j('.hotspot.wide').append('<div class="hotspotWideBottom"></div>');
    $j('#campaignHotspotsAndContents').append('<div class="campaignHotspotsAndContentsBottom"></div>');
    $j('table.campaignContentsTable').jqStripe();

    // contents/show.rhtml
    $j('table.contentTable').jqStripe();

    // login/login.rhtml
    $j('#name').focus();

    // phones/list.rhtml
    $j('table.handsetsTable').jqStripe();

    var w_em = $j('#hotspot_watchdog_email');
    $j('#hotspot_watchdog').change(function() {
        w_em.toggleClass("required");
        w_em.toggleClass("email");
    });

    tb_remove();

})

