/* 
*
* mark front-end framework
*
* to be used with the jQuery library
* http://www.jquery.com
* 
* 
*/


(function (jQuery) {
    jQuery.mark = {
        gallery: function (options) {
            var defaults = {
                selector: '.galleryslide'
            };
            if (typeof options == 'string') defaults.selector = options;
            var options = jQuery.extend(defaults, options);
            return jQuery(options.selector).each(function () {
		var pageit = jQuery(this).find('div.gallerypager');
		jQuery(pageit).show();
		var reel = jQuery(this).find('div.galleryreel');
		jQuery(pageit).children('a:first').addClass("active");
		var imageWidth = jQuery(this).find('.galleryholder').width();
		var imageSum = jQuery(this).find('div.galleryreel img').size();
		var galleryreelWidth = imageWidth * imageSum;
		jQuery(".galleryreel").css({'width' : galleryreelWidth});
		jQuery(pageit).children('a').click(function(event) {	
			var triggerID = jQuery(this).attr("rel") - 1;
			var galleryreelPosition = triggerID * imageWidth;
			jQuery(this).siblings().removeClass('active');
			jQuery(this).addClass('active');
		
			jQuery(reel).animate({ 
				left: -galleryreelPosition
			}, 400 );
			event.preventDefault(event);
		});	

            })
        },
        slidebox: function (options) {
            var defaults = {
                selector: '.slidebox'
            };
            if (typeof options == 'string') defaults.selector = options;
            var options = jQuery.extend(defaults, options);
            return jQuery(options.selector).each(function () {
		var pageit = jQuery(this).find('div.slidepager');
		var reel = jQuery(this).find('div.slidereel');
		jQuery(this).find('div.slidepager ul li a:first').addClass("active");
		var imageWidth = jQuery(this).find('.slideholder').width();
		var imageSum = jQuery(this).find('div.slidereel img').size();
		var slidereelWidth = imageWidth * imageSum;
		jQuery(".slidereel").css({'width' : slidereelWidth});
		jQuery(pageit).find('ul a').click(function(event) {	
			var triggerID = jQuery(this).attr("rel") - 1;
			var slidereelPosition = triggerID * imageWidth;
			jQuery(pageit).find('ul a').removeClass('active');
			jQuery(this).addClass('active');
		
			jQuery(reel).animate({ 
				left: -slidereelPosition
			}, 400 );
			event.preventDefault(event);
		});	

            })
        },
        howwideami: function (options) {
            var defaults = {
                selector: 'div'
            };
            if (typeof options == 'string') defaults.selector = options;
            var options = jQuery.extend(defaults, options);
            return jQuery(options.selector).each(function () {
                var mywidth = jQuery(this).width();
                var outputWidth = "<p class='how-wide'>" + mywidth + "</p>";
                jQuery(outputWidth).prependTo(jQuery(this));
            })
        },
        basket: function (options) {
            var defaults = {
                selector: 'a.basket',
            };
            if (typeof options == 'string') defaults.selector = options;
            var options = jQuery.extend(defaults, options);
            return jQuery(options.selector).each(function () {
		jQuery(this).click(function(){
		var title = jQuery(this).closest('dl').find('dt').text();
		var count = jQuery(this).prev('input').val();
		var whoami = jQuery(this).attr('id');
		var transtitle = '<li>' + count + ' &#215; ' + title + '<span class="starthidden">' + whoami + '</span><a href="#" class="deleteme"><img src="../wp-content/themes/CHRC_custom/css_images/delete.png" title="remove from list" width="16" height="16" /></a></li>';
		jQuery(transtitle).appendTo('#basket');
		jQuery(this).fadeOut('slow');
		jQuery(this).prev('input').fadeOut('slow');
		if( jQuery('#btot').is(':hidden') ) {
		    jQuery('#btot').show();
		}
		return false;
		});
            })
        },
        navigation: function (options) {
            var defaults = {
                selector: '#nav li',
                className: 'over'
            };
            if (typeof options == 'string') defaults.selector = options;
            var options = jQuery.extend(defaults, options);
            return jQuery(options.selector).each(function () {
                jQuery(this).hover(function () {
                    jQuery('ul:first', this).fadeIn(100);
                    jQuery(this).addClass(options.className)
                }, function () {
                    jQuery('ul', this).hide();
                    jQuery(this).removeClass(options.className)
                })
            })
        },
        pullquote: function (options) {
            var defaults = {
                selector: '.pullquoted'
            };
            if (typeof options == 'string') defaults.selector = options;
            var options = jQuery.extend(defaults, options);
            return jQuery(options.selector).each(function () {
                if (jQuery(this).hasClass('pqright')) {
			jQuery(this).clone().addClass('pullquoteright').prependTo(jQuery(this).parent());
                } else {
			jQuery(this).clone().addClass('pullquoteleft').prependTo(jQuery(this).parent());
                };
            })
        },
        tabs: function (options) {
            var defaults = {
                selector: '.tabs'
            };
            if (typeof options == 'string') defaults.selector = options;
            var options = jQuery.extend(defaults, options);
            return jQuery(options.selector).each(function () {
                jQuery(this).addClass("equals");
                var panels = jQuery(this).children('div');
                var thelist = jQuery(this).children('ul');
                jQuery(panels).hide();
                jQuery(thelist).children('li:first').addClass("selected");
                jQuery(this).children('div:first').show();
                var holderHeight = jQuery(this).height();
                jQuery(this).height(holderHeight);
                var clicker = jQuery(thelist).children('li');
                jQuery(clicker).click(function(event){
                event.preventDefault(event);
                jQuery(thelist).children('li').removeClass("selected");
                jQuery(this).addClass("selected");
                var tabtarget = jQuery(this).children('a:first').attr('href');
                jQuery(panels).hide();
                jQuery(tabtarget).slideDown();
                });
            })
        },
        tabs2: function (options) {
            var defaults = {
                selector: '.tabby'
            };
            if (typeof options == 'string') defaults.selector = options;
            var options = jQuery.extend(defaults, options);
            return jQuery(options.selector).each(function () {
                jQuery(this).addClass("equals");
                var panels = jQuery(this).children('div');
                var thelist = jQuery(this).children('ul');
                jQuery(panels).hide();
                jQuery(thelist).children('li:first').children('a').addClass("selected");
                jQuery(this).children('div:first').show();
                var holderHeight = jQuery(this).height();
                jQuery(this).height(holderHeight);
                var clicker = jQuery(thelist).children('li').children('a');
                jQuery(clicker).click(function(event){
                event.preventDefault();
                jQuery(thelist).children('li').children('a').removeClass("selected");
                jQuery(this).addClass("selected");
                var tabtarget = jQuery(this).attr('href');
                jQuery(panels).hide();
                jQuery(tabtarget).show();
                });
            })
        },
        bigclick: function (options) {
            var defaults = {
                selector: 'div.bigtarget'
            };
            if (typeof options == 'string') defaults.selector = options;
            var options = jQuery.extend(defaults, options);
            return jQuery(options.selector).each(function () {
		jQuery(this).click(function(){window.location=jQuery(this).find("a").attr("href");return false;});
		})
        },
        equalizer: function (options) {
            var defaults = {
                selector: 'div.equals'
            };
            if (typeof options == 'string') defaults.selector = options;
            var options = jQuery.extend(defaults, options);
            return jQuery(options.selector).each(function () {
		var tallest = 0;
		var group = jQuery(this).children('div');
		group.each(function() {
			var thisHeight = jQuery(this).height();
			if(thisHeight > tallest) {
				tallest = thisHeight;
			}
		});
		group.height(tallest);
            })
        },
        tooltip: function (options) {
            var defaults = {
                selector: '.tooltip',
                xOffset: 10,
                yOffset: 25,
                clickRemove: false,
                id: 'mark_tooltip',
                content: '',
                useElement: ''
            };
            if (typeof options == 'string') defaults.selector = options;
            var options = jQuery.extend(defaults, options);
            var content;
            return jQuery(options.selector).each(function () {
                var title = jQuery(this).attr('title');
                jQuery(this).hover(function (e) {
                    content = (options.content != '') ? options.content : title;
                    content = (options.useElement != '') ? jQuery('#' + options.useElement).html() : content;
                    jQuery(this).attr('title', '');
                    if (content != '' && content != undefined) {
                        jQuery('body').append('<div id="' + options.id + '">' + content + '</div>');
                        jQuery('#' + options.id).css({
                            'position': 'absolute',
                            'display': 'none'
                        }).css('top', (e.pageY - options.yOffset) + 'px').css('left', (e.pageX + options.xOffset) + 'px').fadeIn('fast')
                    }
                }, function () {
                    jQuery('#' + options.id).remove();
                    jQuery(this).attr('title', title)
                });
                jQuery(this).mousemove(function (e) {
                    var x = ((e.pageX + options.xOffset + jQuery(this).width()) < jQuery(window).width()) ? (e.pageX + options.xOffset) : (e.pageX - options.xOffset - jQuery(this).width() - 16);
                    jQuery('#' + options.id).css('top', (e.pageY - options.yOffset) + 'px').css('left', (x + 'px'))
                });
                if (options.clickRemove) {
                    jQuery(this).mousedown(function (e) {
                        jQuery('#' + options.id).remove();
                        jQuery(this).attr('title', title)
                    })
                }
            })
        },
        popup: function (options) {
            var defaults = {
                selector: '.popup',
                popupId: 'mark_popup',
                preloadText: 'Loading...',
                errorText: 'There has been a problem with your request, please click outside this window to close it.',
                prevText: '&laquo; Previous',
                nextText: 'Next &raquo;'
            };
            if (typeof options == 'string') defaults.selector = options;
            var options = jQuery.extend(defaults, options);
            return jQuery(options.selector).each(function (i) {
                if (jQuery(this).hasClass('gallery')) {
                    var classNames = jQuery(this).attr('class');
                    classNames = classNames.split(' ').join('');
                    jQuery.data(this, 'gallery', classNames);
                    eval('if((typeof ' + classNames + '_arr == "undefined")) ' + classNames + '_arr= new Array()');
                    eval(classNames + '_arr').push(jQuery(this));
                    jQuery.data(this, 'index', eval(classNames + '_arr').length - 1)
                };
                jQuery(this).bind('click', function (e) {
                    e.preventDefault();
                    if (jQuery.browser.opera) jQuery.support.opacity = true;
                    var ie6 = jQuery.browser.msie && jQuery.browser.version.substr(0, 1) < 7;
                    var opera95 = jQuery.browser.opera && jQuery.browser.version <= 9.5;
                    var w = jQuery(window).width();
                    var h = jQuery(document).height();
                    var w2 = jQuery(window).width() / 2;
                    var h2 = jQuery(window).height() / 2;
                    show = function () {
                        jQuery('#' + options.popupId + 'preloader').remove();
                        if (cw != 0) jQuery('#' + options.popupId + 'content').css('width', cw + 'px');
                        if (ch != 0) jQuery('#' + options.popupId + 'content').css('height', ch + 'px');
                        set(jQuery('#' + options.popupId + 'content'));
                        jQuery('#' + options.popupId + 'content').css('visibility', 'visible')
                    };
                    set = function (obj) {
                        jQuery(obj).css({
                            'padding': '10px',
                            'background': '#fff',
                            'color': '#333',
                            'text-align': 'left',
                            'float': 'left',
                            'position': 'fixed',
                            'z-index': '10001',
                            'visible': 'hidden'
                        });
                        var left = w2 - jQuery(obj).width() / 2;
                        var top = h2 - jQuery(obj).height() / 2;
                        jQuery(obj).css({
                            'left': left,
                            'top': top,
                            'display': 'none'
                        }).fadeIn('1000');
                        if (ie6) jQuery(obj).css({
                            'position': 'absolute',
                            'top': (top + jQuery(window).scrollTop()) + 'px'
                        });
                        if (opera95) jQuery(obj).css({
                            'position': 'absolute',
                            'top': (document.body['clientHeight'] / 2 - jQuery(obj).height() / 2 + jQuery(window).scrollTop()) + 'px'
                        });
                        jQuery('.caption', obj).css({
                            'width': jQuery(obj).width() + 'px',
                            'display': 'block'
                        })
                    };
                    if (ie6) jQuery('embed, object, select').css('visibility', 'hidden');
                    error = function () {
                        jQuery('#' + options.popupId + 'content').text(options.errorText);
                        show()
                    };
                    remove = function () {
                        jQuery('#' + options.popupId).remove();
                        jQuery('#' + options.popupId + 'content').remove();
                        jQuery('#' + options.popupId + 'preloader').remove();
                        if (ie6) jQuery('embed, object, select').css('visibility', 'visible')
                    };
                    if (jQuery('#' + options.popupId).length == 0) {
                        jQuery('<div id="' + options.popupId + '"></div>').appendTo('body').css({
                            'width': w,
                            'height': h,
                            'background': '#000',
                            'position': 'absolute',
                            'top': '0',
                            'left': '0',
                            'z-index': '10000',
                            'opacity': .7
                        }).click(function () {
                            remove()
                        })
                    };
                    var href = jQuery(this).attr('href');
                    var extension = href.substr(href.lastIndexOf('.')).toLowerCase();
                    var content;
                    var cw = 0;
                    var ch = 0;
                    var showOk = false;
                    jQuery('<div id="' + options.popupId + 'preloader">' + options.preloadText + '</div>').appendTo('body');
                    set(jQuery('#' + options.popupId + 'preloader'));
                    jQuery('<div id="' + options.popupId + 'content"></div>').appendTo('body');
                    jQuery('#' + options.popupId + 'content').css({
                        'visibility': 'hidden',
                        'position': 'absolute',
                        'top': '-10000px',
                        'left': '-10000px'
                    });
                    if (jQuery(this).hasClass('flash')) {
                        var flash = '<object width="100%" height="100%"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="' + href + '" /><embed src="' + href + '" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="100%" height="100%"></embed></object>';
                        jQuery(flash).appendTo('#' + options.popupId + 'content');
                        cw = 600;
                        ch = 400;
                        showOk = true
                    } else {
                        if (extension == '.jpg' || extension == '.jpeg' || extension == '.gif' || extension == '.png' || extension == '.bmp') {
                            var img = new Image();
                            jQuery(img).error(function () {
                                error()
                            }).appendTo('#' + options.popupId + 'content');
                            img.onload = function () {
                                show();
                                img.onload = function () {}
                            };
                            img.src = href + '?' + (new Date()).getTime() + ' =' + (new Date()).getTime()
                        } else if (href.charAt(0) == '#') {
                            jQuery(href).clone().removeClass('hidden').appendTo('#' + options.popupId + 'content').show();
                            jQuery.mark.forms('#' + options.popupId + 'content form');
                            showOk = true
                        } else {
                            jQuery('<iframe frameborder="0" scrolling="auto" style="width:100%;height:100%" src="' + href + '" />').appendTo('#' + options.popupId + 'content');
                            cw = 900;
                            ch = 500;
                            showOk = true
                        }
                    };
                    var rel = jQuery(this).attr('rel').split(';');
                    jQuery.each(rel, function (i) {
                        if (rel[i].indexOf('width') != -1) cw = rel[i].split(':')[1];
                        if (rel[i].indexOf('height') != -1) ch = rel[i].split(':')[1]
                    });
                    if (jQuery(this).attr('title') != '') {
                        jQuery('<span class="caption">' + jQuery(this).attr('title') + '</span>').appendTo('#' + options.popupId + 'content').css({
                            'display': 'none',
                            'padding': '10px 0 0 0'
                        })
                    };
                    if (showOk) show();
                    jQuery('<img src="css_images/close.png" />').appendTo('#' + options.popupId + 'content').css({
                        'position': 'absolute',
                        'float': 'right',
                        'right': '-16px',
                        'top': '-16px',
                        'color': '#fff',
                        'cursor': 'pointer'
                    }).click(function () {
                        remove()
                    });
                    if (jQuery(this).hasClass('gallery')) {
                        var arr = jQuery.data(this, 'gallery');
                        arr = eval(arr + '_arr');
                        var index = jQuery.data(this, 'index');
                        if (arr.length > 1) {
                            jQuery('<small>' + (index + 1) + '/' + arr.length + '</small>').appendTo('#' + options.popupId + 'content').css({
                                'position': 'absolute',
                                'float': 'right',
                                'left': '70px',
                                'top': '-25px',
                                'color': '#fff',
                                'cursor': 'pointer'
                            });
                            jQuery('<small id="' + options.popupId + 'gallery"></small>').appendTo('#' + options.popupId + 'content').css({
                                'position': 'absolute',
                                'float': 'left',
                                'left': '0',
                                'top': '-30px',
                                'color': '#fff',
                                'cursor': 'pointer'
                            });
                            if (index != 0) {
                                jQuery('<img src="css_images/navL.png" />').css('margin-right', '5px').appendTo('#' + options.popupId + 'gallery').click(function () {
                                    jQuery('#' + options.popupId + 'content').remove();
                                    var obj = arr[index - 1];
                                    jQuery(obj).trigger('click')
                                })
                            }
                            if (index < arr.length - 1) {
                                jQuery('<img src="css_images/navR.png" />').appendTo('#' + options.popupId + 'gallery').click(function () {
                                    jQuery('#' + options.popupId + 'content').remove();
                                    var obj = arr[index + 1];
                                    jQuery(obj).trigger('click')
                                })
                            }
                        }
                    }
                })
            })
        },
        external: function (options) {
            var defaults = {
                selector: 'a'
            };
            if (typeof options == 'string') defaults.selector = options;
            var options = jQuery.extend(defaults, options);
            var hostname = window.location.hostname;
            hostname = hostname.replace('www.', '').toLowerCase();
            return jQuery(options.selector).each(function () {
                var href = jQuery(this).attr('href').toLowerCase();
                if (href.indexOf('http://') != -1 && href.indexOf(hostname) == -1) {
                    jQuery(this).attr('target', '_blank');
                    jQuery(this).addClass('external')
                }
            })
        },
        rotate: function (options) {
            var defaults = {
                selector: '.rotate',
                initPause: 0,
                pause: 5000,
                randomize: false
            };
            if (typeof options == 'string') defaults.selector = options;
            var options = jQuery.extend(defaults, options);
            return jQuery(options.selector).each(function () {
                var obj = jQuery(this);
                var length = jQuery(obj).children().length;
                var temp = 0;

                function getRan() {
                    var ran = Math.floor(Math.random() * length) + 1;
                    return ran
                };

                function show() {
                    if (options.randomize) {
                        var ran = getRan();
                        while (ran == temp) {
                            ran = getRan()
                        };
                        temp = ran
                    } else {
                        temp = (temp == length) ? 1 : temp + 1
                    };
                    jQuery(obj).children().hide();
                    jQuery(':nth-child(' + temp + ')', obj).fadeIn('slow')
                };

                function init() {
                    show();
                    setInterval(show, options.pause)
                };
                setTimeout(init, options.initPause)
            })
        },
        cycle: function (options) {
            var defaults = {
                selector: '.cycle',
                effect: 'fade',
                initPause: 0,
                pause: 5000
            };
            if (typeof options == 'string') defaults.selector = options;
            var options = jQuery.extend(defaults, options);
            return jQuery(options.selector).each(function () {
                var obj = jQuery(this);
                var length = jQuery(obj).children().length;
                var temp = 0;
                var prev = -1;
                var z = 1;
                var h = jQuery(':nth-child(1)', obj).height();
                jQuery(obj).css('position', 'relative').height(h);
                jQuery(obj).children().hide().css({
                    'position': 'absolute',
                    'top': '0',
                    'left': '0'
                });

                function show() {
                    temp = (temp == length) ? 1 : temp + 1;
                    prev = (temp == 1) ? length : temp - 1;
                    jQuery(':nth-child(' + temp + ')', obj).css('z-index', z).fadeIn('slow', function () {
                        jQuery(':nth-child(' + prev + ')', obj).fadeOut('slow')
                    });
                    z++
                };

                function init() {
                    show();
                    setInterval(show, options.pause)
                };
                setTimeout(init, options.initPause)
            })
        },
        jump: function (options) {
            var defaults = {
                selector: 'a.jump',
                speed: 1000
            };
            if (typeof options == 'string') defaults.selector = options;
            var options = jQuery.extend(defaults, options);
            return jQuery(options.selector).click(function () {
                var target = jQuery(jQuery(this).attr('href'));
                var offset = jQuery(target).offset().top;
                jQuery('html,body').animate({
                    scrollTop: offset
                }, 1000, 'linear')
                return false;
            })
        },
        showhide: function (options) {
            var defaults = {
                selector: '.toggle'
            };
            if (typeof options == 'string') defaults.selector = options;
            var options = jQuery.extend(defaults, options);
            return jQuery(options.selector).each(function () {
                var target;
                if (jQuery(this).hasClass('prev')) {
                    target = jQuery(this).prev().hide()
                } else if (jQuery(this).hasClass('id')) {
                    target = jQuery(this).attr('href');
                    target = jQuery(target).hide()
                } else {
                    target = jQuery(this).next().hide()
                };
                jQuery(this).css('cursor', 'pointer');
                jQuery(this).toggle(function () {
                    jQuery(this).addClass('active');
                    jQuery(target).slideDown();
                }, function () {
                    jQuery(target).slideUp();
                    jQuery(this).removeClass('active')
                })
            })
        },
        forms: function (options) {
            var defaults = {
                selector: 'form',
                err: 'This is required',
                errEmail: 'Valid email address is required',
                errUrl: 'URL is required',
                errPhone: 'Phone number is required',
                notValidClass: 'notvalid'
            };

            function check(obj) {
                if (jQuery(obj).val() == '' || checkLabel(obj)) {
                    var errormsg = (jQuery(obj).attr('title') != '') ? jQuery(obj).attr('title') : options.err;
                    error(obj, errormsg)
                }
            };

            function checkRegEx(obj, type) {
                var regEx, err;
                switch (type) {
                case 'url':
                    regEx = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
                    err = options.errUrl;
                    break;
                case 'phone':
                    var regEx = /[\d\s_-]/;
                    err = options.errPhone;
                    break;
                default:
                    regEx = /^[^@]+@[^@]+.[a-z]{2,}jQuery/;
                    err = options.errEmail
                };
                var val = jQuery(obj).val();
                if (val.search(regEx) == -1 || checkLabel(obj)) {
                    var errormsg = (jQuery(obj).attr('title') != '') ? jQuery(obj).attr('title') : err;
                    error(obj, errormsg)
                }
            };

            function checkLabel(obj) {
                var text = jQuery('label[for=' + jQuery(obj).attr('id') + ']').text();
                return (text == jQuery(obj).val())
            };

            function error(obj, errormsg) {
                var parent = jQuery(obj).parent();
                parent.append('<span class="error">' + errormsg + '</span>');
                jQuery('span.error', parent).hide().fadeIn('fast');
                jQuery(obj).addClass(options.notValidClass);
                valid = false
            };
            jQuery('input.label,textarea.label').each(function () {
                var text = jQuery('label[for=' + jQuery(this).attr('id') + ']').text();
                jQuery('label[for=' + jQuery(this).attr('id') + ']').css('display', 'none');
                jQuery(this).val(text);
                jQuery(this).focus(function () {
                    if (jQuery(this).val() == text) jQuery(this).val('')
                });
                jQuery(this).blur(function () {
                    if (jQuery(this).val() == '') jQuery(this).val(text)
                })
            });
            if (typeof options == 'string') defaults.selector = options;
            var options = jQuery.extend(defaults, options);
            return jQuery(options.selector).each(function () {
                jQuery(this).submit(function () {
                    jQuery('.error', this).remove();
                    jQuery('.' + options.notValidClass, this).removeClass(options.notValidClass);
                    valid = true;
                    jQuery(':text.required', this).each(function () {
                        if (jQuery(this).hasClass('email')) {
                            checkRegEx(this, 'email')
                        } else if (jQuery(this).hasClass('url')) {
                            checkRegEx(this, 'url')
                        } else if (jQuery(this).hasClass('phone')) {
                            checkRegEx(this, 'phone')
                        } else {
                            check(this)
                        }
                    });
                    jQuery(':password.required', this).each(function () {
                        check(this)
                    });
                    jQuery('textarea.required', this).each(function () {
                        check(this)
                    });
                    jQuery(':checkbox.required', this).each(function () {
                        if (!jQuery(this).attr('checked')) {
                            var errormsg = (jQuery(this).attr('title') != '') ? jQuery(this).attr('title') : options.err;
                            error(this, errormsg)
                        }
                    });
                    return valid
                })
            })
        }
    }
})(jQuery);
