jQuery.namespace('jQuery.table_view');
//start adding sort icons
jQuery.fn.shake = function(intShakes /*Amount of shakes*/, intDistance /*Shake distance*/, intDuration /*Time duration*/) {
this.each(function() {
$(this).css({position:'relative'});
for (var x=1; x<=intShakes; x++) {
$(this).animate({top:(intDistance*-1)}, (((intDuration/intShakes)/4)))
.animate({top:intDistance}, ((intDuration/intShakes)/2))
.animate({top:0}, (((intDuration/intShakes)/4)));
}
});
return this;
};

jQuery.table_view.prepare_sort=function()
{
    $('.compare thead th').append('<a class="sort_link"  href="#"><img src="/img/tables/sort.gif"></a>');
    var sort_link=$('.sort_link');
    $('.compare').tablesorter();
    sort_link.click(
        function()
        {
            var index=(sort_link.index(this));
            var orientation;
            var image='';
            if($(this).parent().is('.headerSortUp'))
            {
                orientation=0;
                image='asc';
            }
            else
            {
                orientation=1;
                image='desc';
            }
            $(this).find('img').attr('src','/img/tables/'+image+'.gif');


            $('.compare').trigger('sorton',[[[index,orientation]]]);
            return false;
        }
    );

}
//start adding thunders
jQuery.table_view.prepare_thunder=function()
{

    $('.compare input').filter(':not(.attr)').parent().hover(
        function()
        {
            $(this).append('<a class="action" href="#"><img src="/img/tables/action.gif"></a>');
        },
        function()
        {
            $(this).find('.action').remove();
        }
    );
}
//preparing the actions
jQuery.table_view.create_actions=function()
{

  var isNumeric=function (strString)
   //  check for valid numeric strings
   {
       var strValidChars = "0123456789";
       var strChar;
       var blnResult = true;

       if (strString.length == 0) return false;

       //  test strString consists of valid characters listed above
       for (i = 0; i < strString.length && blnResult == true; i++)
          {
          strChar = strString.charAt(i);
          if (strValidChars.indexOf(strChar) == -1)
             {
                blnResult = false;
             }
          }
       return blnResult;
   }
   var get_month_name=function (val,elem)
   {
        var result='';
        val=parseInt(val);
        if (val=='NaN')return;
        elem.find('select[name=month]').children('option').each(
            function()
            {
                if ($(this).val()==val)
                {

                    result=$(this).text();
                    return true;
                }
            }
        );

        return (result).toString();

   }
    var init=function()
    {

        $(this).toggle(
            function()
            {
                 var the_input=$(this).siblings('input[type=hidden]');
                 var type=the_input.attr('class');
                 var menu=$('#menu_'+type);
                 $('.result').html('');

                 TagToTip('menu_'+type,STICKY,true,CLOSEBTN,true, CLOSEBTNCOLORS,['', '#66ff66', 'white', '#00cc00'],PADDING,7,COPYCONTENT,false,DELAY,0,SHADOW,true);
                 var display='';
                 var date=new Date();

                 var value=the_input.val();
                 var input='';
                 switch(type)
                 {
                    case 'number':
                                    display=(the_input.parent().text());
                                    input=the_input.val();
                                    break;
                    case 'date':
                                    var result=''

                                    if (!isNumeric(value.substr(1,value.length)))//collisions between negative timestamp and - as date separator
                                    {

                                        display=value.split('/');

                                        if (!display[0])//month
                                        {
                                            display[0]=date.getMonth()+1;


                                        }
                                        if (!display[1])//day
                                        {

                                            display[1]=date.getDate();

                                        }
                                        if(!display[2])//year
                                        {
                                            display[2]=date.getFullYear();
                                        }

                                        display[0]=get_month_name(parseInt(display[0]),menu);

                                        display=display.join('/');
                                        input=display;


                                    }
                                    else
                                    {
                                        display=(the_input.parent().text());
                                        display=display.split('/');

                                        display[0]=get_month_name(display[0],menu);
                                        display=display.join('/');

                                        input=value;
                                    }
                                    //display convert the first index to 3 letter month
                                    break;
                    case 'item':
                                    input=value;

                                    value=value.split(';');

                                    display=value[1];
                                    var table_id=value[0].split('.');

                                    menu.find('#open_original').attr('href','/compare/'+table_id[0]);

                                    var add_item=$('#add_item');
                                    var remove_item=$('#remove_item');
                                    var is_there_already=false;
                                    $('#comparison_basket > input').each(
                                        function()
                                        {
                                            if ($(this).val()==value[0])
                                            {
                                                is_there_already=true;
                                                return;
                                            }

                                        }
                                    );
                                    if (is_there_already)
                                    {
                                        add_item.css('display','none');
                                        remove_item.css('display','inline');
                                    }
                                    else
                                    {
                                        add_item.css('display','inline');
                                        remove_item.css('display','none');
                                    }

                                    break;
                    case 'attr':break;
                    default:alert('wtf?');return false;

                 }

                 menu.find('.display').text(display);
                 menu.find('.input').attr('value',input);
            },
            function()
            {
                UnTip();
            }
        );
    };

    var destroy=function()
    {
        $(this).unbind('toggle');//.unbind('click');

    }


    $('.action').livequery(init,destroy);

}
/*
start preparing context menu
1. preparing current date
*/
jQuery.table_view.prepare_context_menu=function()
{
    var date=new Date();

    var curr_date=date.getDate();
    var curr_year=date.getFullYear();
    var curr_month=date.getMonth()+1;

    var hold=$('#menu_date');

    hold.find('input[name=year]').val(curr_year);
    hold.find('select[name=month]').children().each(
        function()
        {
            var val=parseInt($(this).val());

            if ( val==curr_month)
            {

                $(this).attr('selected','selected');
            }
        }
    );
    hold.find('select[name=day]').children().each(
        function()
        {
            if ( $(this).val()==curr_date)
            {

                $(this).attr('selected','selected');
            }
        }
    );

    $('#menu_number').find('.unit').autocomplete(["meter","exameter","petameter","terameter","gigameter","megameter","kilometer","hectometer","dekameter","decimeter","centimeter","millimeter","micrometer","nanometer","picometer","femtometer","attometer","megaparsec","kiloparsec","parsec","light year","astronomical unit","nautical league","league","nautical mile","mile","kiloyard","furlong","chain","rod","perch","pole","fathom","yard","link","hand","nail","inch","mil","angstrom","pica","point","twip","caliber","degree","radian","square meter","square kilometer ","square hectometer ","square dekameter ","square decimeter ","square centimeter ","square millimeter ","square micrometer","square nanometer ","hectare","are","barn","square mile ","square yard","square foot","square inch","circular inch","section","acre","cubic meter","cubic kilometer","cubic centimeter","cubic millimeter","liter","exaliter","petaliter","teraliter","gigaliter","megaliter","kiloliter","hectoliter","dekaliter","deciliter","centiliter","milliliter","microliter","nanoliter","picoliter","femtoliter","attoliter","cc","barrel ","gallon","quart ","pint","cup","fluid ounce","tablespoon","dessertspoon","teaspoon","minim","cubic mile","cubic yard","cubic foot","cubic inch","ccf","cubic hundred-foot","acre-foot","acre-inch","liter","barrel","pint","quart","peck","bushel","second","millisecond","microsecond","nanosecond","picosecond","femtosecond","attosecond","shake","minute","hour","day","week","month","year","fortnight","decade","century","millennium","meter/second","meter/hour","meter/minute","kilometer/hour","kilometer/minute","kilometer/second","centimeter/hour","centimeter/minute","centimeter/second","millimeter/hour","millimeter/minute","millimeter/second","foot/hour","foot/minute","foot/second","yard/hour","yard/minute","yard/second","mile/hour","mile/minute","mile/second","knot","meter/second squared","kilometer/second squared","hectometer/second squared","dekameter/second squared","decimeter/second squared","centimeter/second squared","millimeter/second squared","micrometer/second squared","nanometer/second squared","picometer/second squared","femtometer/second squared","attometer/second squared","gal","galileo","mile/second squared","yard/second squared","foot/second squared","inch/second squared","kilogram","gram","exagram","petagram","teragram","gigagram","megagram","hectogram","dekagram","decigram","centigram","milligram","microgram","nanogram","picogram","femtogram","attogram","slug","pound","lbs","ounce","ton","quintal","stone","tonne","carat","grain","kilogram/ cubic meter","kilogram/ cubic centimeter","gram/ cubic meter","gram/ cubic centimeter","gram/cubic millimeter","milligram/cubic meter","milligram/cubic centimeter","milligram/cubic millimeter","exagram/liter","petagram/liter","teragram/liter","gigagram/liter","megagram/liter","kilogram/liter","hectogram/liter","dekagram/liter","gram/liter","decigram/liter","centigram/liter","milligram/liter","microgram/liter","nanogram/liter","picogram/liter","femtogram/liter","attogram/liter","pound/cubic inch","pound/cubic foot","pound/cubic yard","pound/gallon","ounce/cubic inch","ounce/cubic foot","ounce/gallon ","newton","exanewton","petanewton","teranewton","giganewton","meganewton","kilonewton","hectonewton","dekanewton","decinewton","centinewton","millinewton","micronewton","nanonewton","piconewton","femtonewton","attonewton","dyne","joule/meter","joule/centimeter","gram-force","kilogram-force","ton-force","kip-force","kilopound-force","pound-force","ounce-force","pascal","exapascal","petapascal","terapascal","gigapascal","megapascal","kilopascal","hectopascal","dekapascal","decipascal","centipascal","millipascal","micropascal","nanopascal","picopascal","femtopascal","attopascal","newton/square meter","newton/square centimeter","newton/square millimeter","kilonewton/squeared meter","bar","millibar","microbar","dyne/square centimeter","kilogram-force/ square meter","pound-force/square foot","pound-force/square inch","psi","newton meter","newton centimeter","newton millimeter","kilonewton meter","dyne meter","dyne centimeter","dyne millimeter","joule","gigajoule","megajoule","kilojoule","millijoule","microjoule","nanojoule","attojoule","calorie","Btu","ton-hour ","gigaton","megaton","kiloton","ton","dyne centimeter","mile/gallon","meter/liter","exameter/liter","petameter/liter","terameter/liter","gigameter/liter","megameter/liter","kilometer/liter","hectometer/liter","dekameter/liter","centimeter/liter","mile/liter","nautical mile/liter","nautical mile/gallon","kilometer/gallon","meter/gallon","meter/gallon","meter/quart","meter/quart","meter/pint ","meter/pint ","meter/cup ","meter/fluid ounce","meter/fluid ounce","liter/meter","liter/100 km","gallon/mile","gallon/100 mi","gallon/mile","gallon/100 mi","watt","exawatt","petawatt","terawatt","gigawatt","megawatt","kilowatt","hectowatt","dekawatt","deciwatt","centiwatt","milliwatt","microwatt","nanowatt","picowatt","femtowatt","attowatt","horsepower","kilocalorie/hour","kilocalorie/minute","kilocalorie/second","kilocalorie/hour","kilocalorie/minute","kilocalorie/second","calorie/hour","erg/second","kilovolt ampere","volt ampere","newton meter/second","joule/second","exajoule/second","petajoule/second","terajoule/second","gigajoule/second","megajoule/second","kilojoule/second","hectojoule/second","dekajoule/second","decijoule/second","centijoule/second","millijoule/second","microjoule/second","nanojoule/second","picojoule/second","femtojoule/second","attojoule/second","joule/hour","joule/minute","kilojoule/hour","kilojoule/minute","kelvin","Celsius","Fahrenheit","Rankine","bit","nibble","byte","kilobit","kilobyte","megabit","megabyte","gigabit","gigabyte","terabit","terabyte","petabit","petabyte","exabit","exabyte","bit/second","byte/second","kilobit/second","kilobyte/second","kilobit/second","kilobyte/second","megabit/second","megabyte/second","megabit/second","megabyte/second","gigabit/second","gigabyte/second","gigabit/second","gigabyte/second","terabit/second ","terabyte/second ","terabit/second","terabyte/second","United Arab Emirates dirhams","Argentine pesos","Australian dollar","Netherlands Antilles Guilders","Brazil Real","Canadian dollar","Swiss francs","Chinese yuan","Danish kroner","Euro","British pounds","Hong Kong dollars","Indonesian rupiah","Indian rupees","Japanese yen","South Korean won","Mexican pesos","Malaysian ringgit","New Zealand dollars","Philippine pesos","Qatar rials","Russian rubles","Saudi riyals","Singaporean dollar","Thailand baht","Turkish liras","Taiwan dollar","American dollar","South African rand","USD","dollar","feet"],{
                                delay: 5,
                                maxItemsToShow: 10,
                                autoFill:true
                            });

    $('#add_item').click(
        function()
        {
            $(this).parent('form').submit();
            update_basket();
            return false;
        }
    );
     $('#remove_item').click(
        function()
        {
            $(this).parent('form').ajaxSubmit(
                function()
                {
                    $(this).pause(2000);
                    if (location.href.indexOf('/compare/tid')>=0)//if it is in settings then go to basket compile to look like it is updated
                    {
                        window.location='/basket/compile';
                    }
                    else
                    {
                        $('#comparison_basket_img').shake(3,7,300);
                    }
                    update_basket();

                }
            );

            return false;
        }
    );
    $('#open_original').click(
        function()
        {
            window.open(this.href);
            return false;
        }
    );

}
jQuery.table_view.actions=function()
{

    $('.action_form').submit(
        function()
        {
            var id=$(this).attr('id');

            if (id=='')//if there is then use this because it is more specific
            {
                id=$(this).parent().attr('id');
            }
            var parent='#'+id+' .result';

            var options={
                target:parent
            };
            $(parent).html('<img src="/img/ajax-loader.gif" />');

            $(this).ajaxSubmit(options);

            return false;
        }
    );

}
jQuery.table_view.give_medal=function()
{
    var winners= $('#winner_list').children();

    var is_winner=false;

    $('.compare input').filter('.item').each(
        function()
        {
            item_val=$(this).val().split(';');
            item_val=item_val[0];
            is_winner=false;

            winners.each(
                function()
                {
                    winner_val=$(this).val().split(';');

                    if (winner_val[0]==item_val)
                    {
                        is_winner=true;
                        return;
                    }
                }
            );

            if (is_winner)
            {
                html=$(this).parent().html();
                $(this).parent().addClass('winner_column');
                $(this).parent().html('<img src="/img/tables/winner.png" />'+html);
               var index=($('.compare > thead th').index($('.winner_column').get(0)));
               $('.compare > tbody > tr').find('td:eq('+index+')').addClass('winner_column');
            }

        }
    );

}
jQuery.table_view.prepare_embed=function()
{

    var temp=location.href.replace(/compare/i,'compare/embed').replace(/\?.*/,"");
   // $('#embed_code').html('embed code:<input type="text" size="60" value="<iframe width=&quot;'+400+'&quot; height=&quot;'+400+'&quot; src=&quot;'+temp+'&quot; scrolling=&quot;yes&quot; frameborder=&quot;0&quot; > </iframe>" />');
    $('#embed_code input').click(
        function()
        {
            this.select();
	    
        }
    );
    $('#embed_url').focus(
	function()
	{
	    $('#user_css').slideDown();
	}
    );
	
    $('#input_user_css').one('focus',
	    function()
	    {
		$(this).val('');
	    }
    );
    $('#embed_code input[type=button]').click(
	function()
	{
	    var url_to_css = $(this).prev().val();
	    if (url_to_css.length <=  0)//pasted nothing
	    {
		$(this).next().debug();
		$(this).next()
		       .removeClass('success')
		       .addClass('error')
		       .html('please paste a correct url to a css file')
		       .fadeIn();
		return;
	    }
	    if (url_to_css == "paste url to table's stylesheet")return;
	    //here we go...
	    var iframe = $('<div>'+$('#embed_url').val()+'</div>');
	    var src = iframe.find('iframe').attr('src');
	    iframe.find('iframe').attr('src', src+'/'+$(this).prev().val());
	    $(this).next()
		   .html('')
		   .append('<b>embed code with your stylesheet:</b>')
		   .append($('<input type="text" size="30">').val(iframe.html()))
		   .append(' <span><b>enjoy :)</b></span>')
		   .removeClass('error')
		   .addClass('success')
		   .slideDown();

	}
    );

}
jQuery.table_view.prepare_videos=function()
{
    $('.compare embed').attr('width',120);
    $('.compare embed').attr('height',120);
    $('.compare embed').parent().append('<a href="#" class="maxim_video">maximize</a>');
    $('.compare .maxim_video').livequery('click',
            function()
            {
                var video=$(this).siblings('embed');
                video.attr('width',400);
                video.attr('height',350);
                if (!$(this).parent().find('.minim_video').length)
                {

                    $(this).parent().append('<a class="minim_video" href="#">minimize</a>');
                    $(this).remove();
                }
                return false;
            }
    );

    $('.compare .minim_video').livequery('click',
        function()
        {

            var vid=$(this).siblings('embed');
            vid.attr('width',120);
            vid.attr('height',120);

            $(this).parent().append('<a href="#" class="maxim_video">maximize</a>');
            $(this).remove();
            return false;
        }
    );
}

$(document).ready(
    function()
    {
        jQuery.table_view.prepare_sort();
        jQuery.table_view.prepare_videos();
        jQuery.table_view.prepare_thunder();
        jQuery.table_view.prepare_context_menu();
        jQuery.table_view.create_actions();
        jQuery.table_view.give_medal();
        jQuery.table_view.actions();
        jQuery.table_view.prepare_embed();
//        new nicEditor({iconsPath:'/img/nicEditorIcons.gif',buttonList : ['link','bold','italic','underline','strikeThrough','undo','redo']}).panelInstance('leave_comment');
    }

)
