
// c2 Javascript Library version 1.1
// jQuery > 1.3.2 required


function openWindow(url,name,specs,replace) {
  var _url = "";
  var _name = "_blank";
  var _replace = false;
  // assign site defaults in _specs, remove fields you don't need
  var _specs = {
    height: 500,
    width: 500,
    location: 'yes',
    menubar: 'no',
    resizable: 'yes',
    scrollbars: 'yes',
    status: 'yes',
    titlebar: 'yes',
    toolbar: 'no'
    };
  if(url) { _url = url; }
  // cleans up name so it doesn't cause ie6 errors
  if(name) { _name = name.replace(/[\s-]*/g,""); }
  if(replace) { _replace = replace; }
  $.extend(_specs, specs);
  specs = "";
  for(var key in _specs) {
    if(specs.length !== 0) { specs += ","; }
    specs += key + '=' + _specs[key];
  }
  var win = window.open(_url,_name,specs,_replace);
  win.focus();
  return false;
}


// Submit on Enter Key
// onkeypress="return enterKey(event,'objectID')"
function enterKey(e,selector) {
  if(!e) e = window.event;
  var key = e.which;
  if(!key) key = e.keyCode;
  if (key && key == 13) {
    jQuery(selector).each(function() {
      if(this.tagName == 'A') {
        var href = this.href.replace(window.location,"");
        if(href.indexOf('javascript') >= 0) {
          eval(unescape(this.href.replace(/^javascript:/i,"")));
        }
        else {
          this.onclick();
        }
      }
      else if(this.tagName == 'INPUT' || this.tagName == 'BUTTON') {
        this.click();
      }
      else if(this.tagName == 'FORM') {
        this.submit();
      }
    });
    return false;
  }
  return true;
}

(function($) {

$.fn.enterKey = function(selector) {
  return this.each(function() {
    $(this).keypress(function(e) {
      if(e.which == 13) {
        $(selector).each(function() {
          if(this.tagName == 'A') {
            var href = this.href.replace(window.location,"");
            if(href.indexOf('javascript') >= 0) {
              eval(unescape(this.href.replace(/^javascript:/i,"")));
            }
            else {
              this.onclick();
            }
            e.preventDefault();
          }
          else if(this.tagName == 'INPUT' || this.tagName == 'BUTTON') {
            this.click();
            e.preventDefault();
          }
          else if(this.tagName == 'FORM') {
            this.submit();
          }
        });
      }
    });
  });
};

})(jQuery);

function inputFocus(object, defaultValue) {
    var val;
    if(defaultValue) { val = defaultValue; }
    else { val = object.defaultValue; }
    if(val == object.value) {
        object.value = "";
    }
  $(object).removeClass('defaultValue').addClass('userValue');
}
function inputBlur(object, defaultValue) {
    if(object.value.replace(/\s/g,"").length < 1) {
        var val;
        if(defaultValue) { val = defaultValue; }
        else { val = object.defaultValue; }
        object.value = val;
    $(object).addClass('defaultValue').removeClass('userValue');
    }
}

(function($) {

$.fn.defaultVal = function(defaultValue) {
  return this.each(function() {
    var val = this.defaultValue;
    if(defaultValue) { val = defaultValue; }
    $(this).focus(function() {
      if(val == this.value) {
        this.value = "";
      }
      $(this).removeClass('defaultValue').addClass('userValue');
    });
    $(this).blur(function() {
      if(this.value.replace(/\s/g,"").length < 1) {
        this.value = val;
        $(this).addClass('defaultValue').removeClass('userValue');
      }
    });
  });
};

})(jQuery);


// textLimit

(function($) {

$.fn.textLimit = function(options) {
  var opts = $.extend({}, $.fn.textLimit.defaults, options);

  return this.each(function() {
    
    var $this = $(this);
    if(!opts.allowOver) {
      $this.keydown(function(e) {
        if(this.value.length >= opts.limit) {
          if(document.selection && document.selection.createRange().text.length > 0) {
            return;
          }
          else if(this.selectionEnd - this.selectionStart > 0) {
            return;
          }
          var key = e.which;
          if(key > 46 || key == 13 || key == 32) {
            e.preventDefault();
          }
        }
      });
    }
    $this.bind('keyup onchange', function() {
      var val = clean(this.value);
      if(!opts.allowOver && val.length > opts.limit) {
        val = val.substr(0, opts.limit);
      }
      if(this.value != val) {
        this.value = val;
        this.scrollTop = this.scrollHeight;
      }
      setCount(val.length);
      setRemaining(val.length);
    });
    setTimeout(function() {
        setCount($this.val().length);
        setRemaining($this.val().length);
      }, 10);
    
  });
  
  function setCount(length) {
    if(opts.count) {
      opts.count.innerHTML = length;
      adjustStyle(opts.count, length);
    }
  }
  function setRemaining(length) {
    if(opts.remaining) {
      opts.remaining.innerHTML = opts.limit - length;
      adjustStyle(opts.remaining, length);
    }
  }
  function adjustStyle(object, length) {
    if(length > opts.limit) {
      $(object).addClass(opts.overClass);
    }
    else {
      $(object).removeClass(opts.overClass);
    }
  }
  function clean(value) {
    return value.replace(opts.regex, '');
  }
};
$.fn.textLimit.defaults = {
  limit: 200,
  regex: /<[^ ]\/?[^>]+>/gi,
  allowOver: false,
  count: null,
  remaining: null,
  overClass: 'error'
};

})(jQuery);



// HTML Truncator:
//    var html = document.getElementById('html').value.truncate(500, '&hellip;');

String.prototype.truncate = function(maxLength, suffix) {
  if(!maxLength) { maxLength = 100; }
  var html = this.replace(/& /g,"&amp; ").replace(/< /g,"&lt; ").replace(/\n|\t/g,"").replace(/(<script\ .*?>.*?<\/script>)|<!.*?>/ig,"").replace(/  /g," ");
  var re = /(?:(?:<([a-z0-9\/]+)([^<>]*)>)|(&[a-z]+;|#[0-9]+;))([^<&]*)/im;
  var teaser = "";
  if(html.match(re)) {
    teaser = html.substring(0, html.indexOf(html.match(re)[0]));
  }
  else {
    teaser = html;
  }
  var count = teaser.length;
  if(count >= maxLength) {
    teaser = teaser.substring(0, maxLength);
    if(suffix && count != maxLength) {
      teaser += suffix;
    }
  }
  else if(html.length > maxLength) {
    var stack = [];
    var startIndex = 0;
    var totalLength = html.length;
    var result, pos, temp;
    while(startIndex < totalLength) {
      result = re.exec(html);
      if (result && result.length > 0 && result[0].length > 0 && count < maxLength) {
        pos = html.indexOf(result[0]);
        startIndex += pos;
        if(result[1] && result[1].indexOf('/') < 0) {
          if(result[2].length === 0 || result[2].lastIndexOf('/') != result[2].length-1) {
            stack.push(result[1]);
          }
          teaser += "<" + result[1] + result[2] + ">";
        }
        else if(result[3]) {
          teaser += result[3];
          count++;
        }
        else {
          var pop = stack.pop();
          if("/" + pop == result[1]) {
            teaser += "<" + result[1] + ">";
          }
          else {
            alert('invalid html: ' + result[0]);
            break;
          }
        }
        temp = result[4];
        if(count + temp.length > maxLength) {
          temp = temp.substring(0, maxLength - count);
          teaser += temp;
          if(suffix) {
            teaser += suffix;
          }
          break;
        }
        else {
          teaser += temp;
          count += temp.length;
        }
        html = html.substr(pos + result[0].length);
        startIndex += result[0].length;
      }
      else if(suffix && count == maxLength && result[4].length > 0) {
        teaser += suffix;
        break;
      }
      else {
        break;
      }
    }
    for(var x=stack.length-1;x>-1;x--) {
      teaser += "</" + stack[x] + ">";
    }
  }
  else {
    teaser = html;
  }
  return teaser;
};

String.prototype.trim = function(str) {
  if(str && str.length > 0) {
    var s = this;
    if(s.indexOf(str) === 0) {
      s = s.substring(str.length,s.length);
    }
    if(s.lastIndexOf(str) == s.length - str.length) {
      s = s.substring(0, s.length - str.length);
    }
    return s;
  }
  else {
    return this.replace(/^\s+|\s+$/g,"");
  }
};

String.prototype.ltrim = function(str) {
  if(str && str.length > 0) {
    if(this.indexOf(str) === 0) {
      return this.substring(str.length,this.length);
    }
    else {
      return this;
    }
  }
  else {
    return this.replace(/^\s+/,"");
  }
};

String.prototype.rtrim = function(str) {
  if(str && str.length > 0) {
    if(this.lastIndexOf(str) == this.length - str.length) {
      return this.substring(0, this.length - str.length);
    }
    else {
      return this;
    }
  }
  else {
    return this.replace(/\s+$/,"");
  }
};


jQuery.getQuery = function(param) {
  var p = escape(unescape(param));
  var regex = new RegExp("[?&]" + p + "(?:=([^&]*))?","i");
  var match = regex.exec(window.location.search);
  var value = null;
  if( match !== null ){
    value = match[1];
  }
  return value;
};
jQuery.randomInt = function(min, max) {
  return Math.floor(Math.random()*(max+1-min)) + min;
};


jQuery.extend( jQuery.easing,
{
  easeInQuad: function (x, t, b, c, d) {
    return c*(t/=d)*t + b;
  },
  easeOutQuad: function (x, t, b, c, d) {
    return -c *(t/=d)*(t-2) + b;
  },
  easeInOutQuad: function (x, t, b, c, d) {
    if ((t/=d/2) < 1) return c/2*t*t + b;
    return -c/2 * ((--t)*(t-2) - 1) + b;
  },
  easeInCubic: function (x, t, b, c, d) {
    return c*(t/=d)*t*t + b;
  },
  easeOutCubic: function (x, t, b, c, d) {
    return c*((t=t/d-1)*t*t + 1) + b;
  },
  easeInOutCubic: function (x, t, b, c, d) {
    if ((t/=d/2) < 1) return c/2*t*t*t + b;
    return c/2*((t-=2)*t*t + 2) + b;
  },
  easeInQuart: function (x, t, b, c, d) {
    return c*(t/=d)*t*t*t + b;
  },
  easeOutQuart: function (x, t, b, c, d) {
    return -c * ((t=t/d-1)*t*t*t - 1) + b;
  },
  easeInOutQuart: function (x, t, b, c, d) {
    if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
    return -c/2 * ((t-=2)*t*t*t - 2) + b;
  },
  easeInQuint: function (x, t, b, c, d) {
    return c*(t/=d)*t*t*t*t + b;
  },
  easeOutQuint: function (x, t, b, c, d) {
    return c*((t=t/d-1)*t*t*t*t + 1) + b;
  },
  easeInOutQuint: function (x, t, b, c, d) {
    if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
    return c/2*((t-=2)*t*t*t*t + 2) + b;
  },
  easeInSine: function (x, t, b, c, d) {
    return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
  },
  easeOutSine: function (x, t, b, c, d) {
    return c * Math.sin(t/d * (Math.PI/2)) + b;
  },
  easeInOutSine: function (x, t, b, c, d) {
    return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
  },
  easeInExpo: function (x, t, b, c, d) {
    return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
  },
  easeOutExpo: function (x, t, b, c, d) {
    return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
  },
  easeInOutExpo: function (x, t, b, c, d) {
    if (t==0) return b;
    if (t==d) return b+c;
    if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
    return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
  },
  easeInCirc: function (x, t, b, c, d) {
    return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
  },
  easeOutCirc: function (x, t, b, c, d) {
    return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
  },
  easeInOutCirc: function (x, t, b, c, d) {
    if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
    return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
  },
  easeInElastic: function (x, t, b, c, d) {
    var s=1.70158;var p=0;var a=c;
    if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
    if (a < Math.abs(c)) { a=c; var s=p/4; }
    else var s = p/(2*Math.PI) * Math.asin (c/a);
    return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
  },
  easeOutElastic: function (x, t, b, c, d) {
    var s=1.70158;var p=0;var a=c;
    if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
    if (a < Math.abs(c)) { a=c; var s=p/4; }
    else var s = p/(2*Math.PI) * Math.asin (c/a);
    return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
  },
  easeInOutElastic: function (x, t, b, c, d) {
    var s=1.70158;var p=0;var a=c;
    if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
    if (a < Math.abs(c)) { a=c; var s=p/4; }
    else var s = p/(2*Math.PI) * Math.asin (c/a);
    if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
    return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
  },
  easeInBack: function (x, t, b, c, d, s) {
    if (s == undefined) s = 1.70158;
    return c*(t/=d)*t*((s+1)*t - s) + b;
  },
  easeOutBack: function (x, t, b, c, d, s) {
    if (s == undefined) s = 1.70158;
    return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
  },
  easeInOutBack: function (x, t, b, c, d, s) {
    if (s == undefined) s = 1.70158; 
    if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
    return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
  },
  easeInBounce: function (x, t, b, c, d) {
    return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
  },
  easeOutBounce: function (x, t, b, c, d) {
    if ((t/=d) < (1/2.75)) {
      return c*(7.5625*t*t) + b;
    } else if (t < (2/2.75)) {
      return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
    } else if (t < (2.5/2.75)) {
      return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
    } else {
      return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
    }
  },
  easeInOutBounce: function (x, t, b, c, d) {
    if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
    return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
  }
});

/*! Copyright (c) 2009 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.
 * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
 * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
 *
 * Version: 3.0.2
 * 
 * Requires: 1.2.2+
 */

(function($) {

var types = ['DOMMouseScroll', 'mousewheel'];

$.event.special.mousewheel = {
  setup: function() {
    if ( this.addEventListener )
      for ( var i=types.length; i; )
        this.addEventListener( types[--i], handler, false );
    else
      this.onmousewheel = handler;
  },
  
  teardown: function() {
    if ( this.removeEventListener )
      for ( var i=types.length; i; )
        this.removeEventListener( types[--i], handler, false );
    else
      this.onmousewheel = null;
  }
};
$.fn.extend({
  mousewheel: function(fn) {
    return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
  },
  
  unmousewheel: function(fn) {
    return this.unbind("mousewheel", fn);
  }
});
function handler(event) {
  var args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true;
  
  event = $.event.fix(event || window.event);
  event.type = "mousewheel";
  
  if ( event.wheelDelta ) delta = event.wheelDelta/120;
  if ( event.detail     ) delta = -event.detail/3;
  
  // Add events and delta to the front of the arguments
  args.unshift(event, delta);

  return $.event.handle.apply(this, args);
}

})(jQuery);

