﻿/**
 * Common methods plugin
 * by Brandon Goldman
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 */

(function($) {
    $.extend({
        //returns today's date
        dateToday: function() {
            var d = new Date;
            var month = d.getMonth() + 1;
            var day = d.getDate();
            var year = d.getFullYear();
            return month + '/' + day + '/' + year;
        },
        
        //reloads the current page
        reload: function() {
            window.location.reload();
        },
    
        //returns the requested GET parameter from the URL
        url: function(param) {
            var regex = '[?&]' + param + '=([^&#]*)';
            var results = (new RegExp(regex)).exec(window.location.href);
            if(results) return results[1];
            return '';
        },
    
        //opens a new window given the url and window name
        window: function(url, name, width, height) {
            var width = width || screen.width / 2;
            var height = height || screen.height / 2;
            var left = (screen.width - width) / 2;
            var top = (screen.height - height) / 2;
            features = 'channelmode=0,dependent=0,directories=0,fullscreen=0,location=1,menubar=0,resizable=1,scrollbars=1,status=1,toolbar=1';    
            var params = 'width=' + width + ',height=' + height + ',left=' + left + ',top=' + top + ',' + features;
            win = window.open(url, name, params);
            win.focus();
            return win;
        },
        
        //closes any window given the window name
        windowClose: function(name) {
            open('', name, '').close();
        },
        //RANDOM SET STRINGS
        randomArrayString: function() {
            var text_st = new Array("middle_name", "ssn", "phone_number", 
            "company_url", "credit_card", "street_address", "contact_name", "federal_tax", 
            "fax_number", "postal_code", "comments");

            var count = text_st.length;
            var randomstring = '';
            var rnd_no = Math.round((count-1)*Math.random());
            return text_st[rnd_no];
        },
        //RANDOM STRING PARAMS
        randomString: function(sChrs,iLen) {
            var chars = sChrs;
            var string_length = iLen;
            var randomstring = '';
            for (var i=0; i<string_length; i++) {
                var rnum = Math.floor(Math.random() * chars.length);
                randomstring += chars.substring(rnum,rnum+1);
            }
            return randomstring;
        }
    });
    
    //protects form via css from spammers a random variable is sent to serverside to verify
    $.fn.CssCaptcha = function() {
        $(this).attr("class", "cs_special").attr("name", $.randomArrayString());
        $('body form').append('<input type=\"hidden\" name="kill" value="' + $(this).attr('name') + '"');
    };
    
    $.fn.labelOver = function(overClass) {
	    $(this).wrapAll("<div class=\"flabel\"></div>");
	    return this.each(function(){
		    var label = jQuery(this);
		    $(label).css("display", "block");
		    var f = label.attr('for');
		    if (f) {
			    var input = jQuery('#' + f);
    			this.hide = function() {label.css({ textIndent: -10000 })}
    			this.show = function() {if (input.val() == '') label.css({ textIndent: 0 })}
                input.focus(this.hide);
			    input.blur(this.show);
		        label.addClass(overClass).click(function(){ input.focus() });
    			if (input.val() != '') this.hide(); 
		    }
	    });
    }
    
    //protects a form from spammers by adding a field and optional token for the server-side form processing to verify against
    $.fn.protectForm = function(params) {
        params = params || {};
        var fieldName = params.fieldName || '__protect';
        var token = params.token || (Math.floor(Math.random() * (1 + 99999999 - 11111111)) + 11111111);
        var submitNow = false;
        this.submit(function() {
            if(submitNow == true) return true;
            var input = $('<input type="hidden" />').attr('name', fieldName).val(token);
            $(this).append(input);
            submitNow = true;
            this.submit();
            return false;
        });
    };

    //adds zebra stripes and a hover stripe to the selected tables
    $.fn.zebraTables = function(rowEven, rowHover) {
        rowEven = rowEven || 'row_even';
        rowHover = rowHover || 'row_hover';
        $('tr:even', this).addClass(rowEven);
        $('tr', this).mouseover(function() {
            $(this).addClass(rowHover);
        }).mouseout(function() {
            $(this).removeClass(rowHover);
        });
    };
    
    $.fn.defuscate = function( settings ) {
        settings = jQuery.extend({
            link: true
        }, settings);
        var regex = /\b([A-Z0-9._%-]+)\([^)]+\)((?:[A-Z0-9-]+\.)+[A-Z]{2,6})\b/gi;
        return this.each(function() {
            if ( $(this).is('a[@href]') ) {
                // If it's an <a> element, defuscate the href attribute
                $(this).attr('href', $(this).attr('href').replace(regex, '$1@$2'));
                // Make sure that the element's contents is not made into a link
                var is_link = true;
                //alert($(this).attr('href'));
            }
            // Defuscate the element's contents
            $(this).html($(this).html().replace(regex, (settings.link && !is_link ? '<a href="mailto:$1@$2">$1@$2</a>' : '$1@$2')));
      });
    };
    
    jQuery.fn.cssRadio = function () {
        var context = this;

	    jQuery("input[@type='radio'] + label", this)
	    .each( function(){
		    if ( jQuery(this).prev()[0].checked )
			    jQuery(this).addClass("checked");
		    })
	    .hover(
		    function() { $(this).addClass("over"); },
		    function() { $(this).removeClass("over"); }
		    )
	    .click( function() {
	        jQuery(this).prev().checked = true;
	        
		    jQuery("input[@type='radio'] + label", context)
			    .each( function() {
				    jQuery(this)
					    .removeClass()
					    .prev()[0].checked = false;
			    });
		    jQuery(this)
			    .addClass("checked")
			    .prev()[0].checked = true;
			    
		    })
	    .prev().hide();
    }
    
    jQuery.fn.cssCheckbox = function () {
        jQuery("input[@type='checkbox'] + label", this)
		    .each( function(){
			    if ( jQuery(this).prev()[0].checked )
				    jQuery(this).addClass("checked");
		    })
		    .hover( 
			    function() { jQuery(this).addClass("over"); },
			    function() { jQuery(this).removeClass("over"); }
		    )
		    .click( function() {
			    jQuery(this)
				    .toggleClass("checked")
				    .prev()[0].checked = !jQuery(this).prev()[0].checked;
		    })
		    .prev().hide();
    }
})(jQuery);