$.fn.replaceWithAndReturnNew = function(html){
   var div = document.createElement('div');
   var replaced = this[0];
   replaced.parentNode.replaceChild(div, replaced);
   div.innerHTML = html;
   var replacer = div.firstChild;
   div.parentNode.replaceChild(replacer, div);
   return $(replacer);
};

// Need this workaround because aspectRatio for resizable cannot
// be set after the resizable is initiated
(function() {
   // Work around http://dev.jqueryui.com/ticket/4186
   var oldSetData = $.ui.resizable.prototype._setData;
   $.ui.resizable.prototype._setData = function(key, value) {
      oldSetData.apply(this, arguments);
      if (key === "aspectRatio") {
         this._aspectRatio = !!value;
      }
   };

   // Fix for nested draggables
   // http://dev.jqueryui.com/ticket/4333
   $.extend($.ui.draggable.prototype, (function (orig) {
     return {
       _mouseCapture: function (event) {
         var result = orig.call(this, event);
         if (result && $.browser.msie) event.stopPropagation();
         return result;
       }
     };
   })($.ui.draggable.prototype["_mouseCapture"]));

   $.extend($.fn.disableTextSelect = function() {
      return this.each(function(){
         if($.browser.mozilla){//Firefox
            $(this).css('MozUserSelect','none');
         }else if($.browser.msie){//IE
            $(this).bind('selectstart',function(){return false;});
         }else{//Opera, etc.
            $(this).mousedown(function(){return false;});
         }
      });
   });

})();


// Global variables
var RESIZING = false;

var FLUID = {
   jQuery : $,

   settings : {
   },

   init : function () {
      this.initializeLayout();
   },

   initializeLayout : function() {
      var FLUID = this,
         $ = this.jQuery;

      $('.featureImageDot').unbind().mouseenter(function() {
         if ($('#' + this.id + ' img').attr('src').indexOf("dotred") >= 0)
            return;

         $(this).css('cursor', 'pointer');
         $('#' + this.id + ' img').attr('src', "/images/dotwhite.gif");
      }).mouseleave(function() {
         if ($('#' + this.id + ' img').attr('src').indexOf("dotred") < 0)
            $('#' + this.id + ' img').attr('src', "/images/dotgray.gif");

         $(this).css('cursor', '');
      }).click(function() {
         var id = this.id.replace(/featureImageDot/,'');

         if (id == FEATUREIMAGECURRENT)
            return;

         FEATUREIMAGEMANUALSELECT = true;
         featureImagesLoad(id);
         return false;
      });

      $('.featureImage').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
      }).mouseleave(function() {
      }).click(function() {
         FEATUREIMAGEMANUALSELECT = true;
         next = FEATUREIMAGECURRENT + 1;

         if (next > FEATUREIMAGES)
            next = 1;

         featureImagesLoad(next);
         return false;
      });



      // Initialize the feature images
      var featureImages = $('.featureImage').size();
      if (featureImages > 0)
         initializeFeatureImages(featureImages);

      FLUID.initializeContent();
   },

   initializeContent : function() {
      var FLUID = this,
         $ = this.jQuery;
   }

};

$(document).ready(function() {
   FLUID.init(); 
});

function locationHash(hash) {
   document.location.hash = hash;
}

function zeroPad(num, count) {
   var numZeropad = num + '';

   while(numZeropad.length < count)
      numZeropad = "0" + numZeropad;

   return numZeropad;
}

function getSalt() {
   return Math.floor(Math.random()*1000);
}

function evalJSON(responseText) {
   var json = eval('(' + responseText + ')');

   return json;
}

function check(json) {
   var check = parseInt(json.check);
   if (check == 0)
      return false;
                  
   return true;
}                 

function refresh() {
   location.reload(true);
}


function trim(str, chars) {
   return ltrim(rtrim(str, chars), chars);
}        
      
function ltrim(str, chars) {
   chars = chars || "\\s";
   return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}           
         
function rtrim(str, chars) {
   chars = chars || "\\s";
   return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

//-----------------------
var FEATUREIMAGES = 0;
var FEATUREIMAGECURRENT = 1;
var FEATUREIMAGEMANUALSELECT = false;
var FEATUREIMAGESLOADING = false;
var FEATUREIMAGESTIMER = 5000;

function initializeFeatureImages(featureCount) {
   FEATUREIMAGES = featureCount;


   if (featureCount > 1) {
      setTimeout("featureImagesNext()", FEATUREIMAGESTIMER);

   }
}

function featureImagesNext() {
   if (!FEATUREIMAGES || FEATUREIMAGEMANUALSELECT)
      return;

   next = FEATUREIMAGECURRENT + 1;

   if (next > FEATUREIMAGES)
      next = 1;

   featureImagesLoad(next);
   setTimeout("featureImagesNext()", FEATUREIMAGESTIMER);
}

var FEATUREIMAGEBLOCKOFFSET = 0;

function featureImagesLoad(next) {
   if (FEATUREIMAGESLOADING)
      return;

   FEATUREIMAGESLOADING = true; 
   var current = 'featureImage' + FEATUREIMAGECURRENT;
   var currentDot = 'featureImageDot' + FEATUREIMAGECURRENT;
   
   FEATUREIMAGECURRENT = next;
   
   var next = 'featureImage' + FEATUREIMAGECURRENT;
   var nextDot = 'featureImageDot' + FEATUREIMAGECURRENT;
   
   // Update the dot
   $('#' + currentDot + ' img').attr('src', "/images/dotgray.gif");
   $('#' + nextDot + ' img').attr('src', "/images/dotred.gif");
   $('#' + current).removeClass('active').addClass('lastActive');

   FEATUREIMAGEBLOCKOFFSET += 900;

   // Set the next one to be offset 900px, show it with full opacity
   $('#' + next).css("left", FEATUREIMAGEBLOCKOFFSET).show();

   // Move the entire block left
   $('#featureImages').animate({ left: -FEATUREIMAGEBLOCKOFFSET }, 400, function() {
      $('#' + current).removeClass('active lastActive').hide();
      FEATUREIMAGESLOADING = false;
   });

   
/*
   $('#' + next).show().css({opacity: 0.0}).addClass('active')
      .animate({opacity: 1.0}, 1000, function() {
         $('#' + current).removeClass('active lastActive').hide();
         FEATUREIMAGESLOADING = false;
      });
*/



}

//-----------------------
function contactFormSubmit() {
   var error = false;
   var values = "";
   $("input[name='submit']",'.contactFormBlock').attr("disabled", true);
   $('input,textarea','.contactFormBlock').each(function() {
      if (values.length > 0)
         values += ",";

      var value = trim($(this).val());

      if (value.length <= 0)
         error = true;

      values += $(this).attr("name") + "=" + escape(value);
   });

   if (error) {
      confirm("All fields are required for valid submission");
      $("input[name='submit']",'.contactFormBlock').attr("disabled", false);
      return false;
   }

   $("input[name='submit']",'.contactFormBlock').val("submitting...");

   var salt = getSalt();

   $.post('/ajax_contactform.php', { salt : salt, values : values }, function(data) {
      var json = evalJSON(data);

      if (check(json)) {
         $('.contactFormBlock').html("<strong>" + json.response + "</strong>");
      } else {
         confirm(json.response);
         $("input[name='submit']",'.contactFormBlock').val("submi").attr("disabled", false);
      }
   });


}
         

//-----------------------
function loginQuery() {
   var un = escape($('#loginun').val()); 
   var pw = md5($('#loginpw').val());

   var rm = $('#loginrememberme').attr('checked') ? 1 : 0;

   $('#loginResponse').html("verifying...");
   $('#loginsubmit').attr('disabled', true);

   var salt = getSalt();

   $.get('/ajax_loginquery.php', { salt : salt, rm : rm, un : un, pw : pw }, function(data) {
      var json = evalJSON(data);
         
      $('#loginResponse').html(json.response);
         
      if (check(json)) { 
         setTimeout("refresh()", 1000);
      } else
         $('#loginsubmit').attr('disabled', false);
            
   });
}

function loginCancel() {
   $('#loginBlock').hide();
}


function md5(str) {
   var xl;
 
   var RotateLeft = function(lValue, iShiftBits) {
      return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
   };
 
   var AddUnsigned = function(lX,lY) {
      var lX4,lY4,lX8,lY8,lResult;
      lX8 = (lX & 0x80000000);
      lY8 = (lY & 0x80000000);
      lX4 = (lX & 0x40000000);
      lY4 = (lY & 0x40000000);
      lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
      if (lX4 & lY4) {
         return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
      }
      if (lX4 | lY4) {
         if (lResult & 0x40000000) {
            return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
         } else {
            return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
         }
      } else {
         return (lResult ^ lX8 ^ lY8);
      }
   };
 
   var F = function(x,y,z) { return (x & y) | ((~x) & z); };
   var G = function(x,y,z) { return (x & z) | (y & (~z)); };
   var H = function(x,y,z) { return (x ^ y ^ z); };
   var I = function(x,y,z) { return (y ^ (x | (~z))); };
 
   var FF = function(a,b,c,d,x,s,ac) {
      a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
      return AddUnsigned(RotateLeft(a, s), b);
   };
 
   var GG = function(a,b,c,d,x,s,ac) {
      a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
      return AddUnsigned(RotateLeft(a, s), b);
   };
 
   var HH = function(a,b,c,d,x,s,ac) {
      a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
      return AddUnsigned(RotateLeft(a, s), b);
   };
 
   var II = function(a,b,c,d,x,s,ac) {
      a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
      return AddUnsigned(RotateLeft(a, s), b);
   };
 
   var ConvertToWordArray = function(str) {
      var lWordCount;
      var lMessageLength = str.length;
      var lNumberOfWords_temp1=lMessageLength + 8;
      var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
      var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
      var lWordArray=Array(lNumberOfWords-1);
      var lBytePosition = 0;
      var lByteCount = 0;
      while ( lByteCount < lMessageLength ) {
         lWordCount = (lByteCount-(lByteCount % 4))/4;
         lBytePosition = (lByteCount % 4)*8;
         lWordArray[lWordCount] = (lWordArray[lWordCount] | (str.charCodeAt(lByteCount)<<lBytePosition));
         lByteCount++;
      }
      lWordCount = (lByteCount-(lByteCount % 4))/4;
      lBytePosition = (lByteCount % 4)*8;
      lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
      lWordArray[lNumberOfWords-2] = lMessageLength<<3;
      lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
      return lWordArray;
   };
 
   var WordToHex = function(lValue) {
      var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
      for (lCount = 0;lCount<=3;lCount++) {
         lByte = (lValue>>>(lCount*8)) & 255;
         WordToHexValue_temp = "0" + lByte.toString(16);
         WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
      }
      return WordToHexValue;
   };
 
   var x=Array();
   var k,AA,BB,CC,DD,a,b,c,d;
   var S11=7, S12=12, S13=17, S14=22;
   var S21=5, S22=9 , S23=14, S24=20;
   var S31=4, S32=11, S33=16, S34=23;
   var S41=6, S42=10, S43=15, S44=21;
 
   str = utf8_encode(str);
   x = ConvertToWordArray(str);
   a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
   
   xl = x.length;
   for (k=0;k<xl;k+=16) {
      AA=a; BB=b; CC=c; DD=d;
      a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
      d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
      c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
      b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
      a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
      d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
      c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
      b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
      a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
      d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
      c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
      b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
      a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
      d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
      c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
      b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
      a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
      d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
      c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
      b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
      a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
      d=GG(d,a,b,c,x[k+10],S22,0x2441453);
      c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
      b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
      a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
      d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
      c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
      b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
      a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
      d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
      c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
      b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
      a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
      d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
      c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
      b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
      a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
      d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
      c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
      b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
      a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
      d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
      c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
      b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
      a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
      d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
      c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
      b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
      a=II(a,b,c,d,x[k+0], S41,0xF4292244);
      d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
      c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
      b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
      a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
      d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
      c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
      b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
      a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
      d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
      c=II(c,d,a,b,x[k+6], S43,0xA3014314);
      b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
      a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
      d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
      c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
      b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
      a=AddUnsigned(a,AA);
      b=AddUnsigned(b,BB);
      c=AddUnsigned(c,CC);
      d=AddUnsigned(d,DD);
   }
 
   var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);
 
   return temp.toLowerCase();
}

function utf8_encode(string) {
   string = (string+'').replace(/\r\n/g, "\n").replace(/\r/g, "\n");
 
   var utftext = "";
   var start, end;
   var stringl = 0;
 
   start = end = 0;
   stringl = string.length;
   for (var n = 0; n < stringl; n++) {
      var c1 = string.charCodeAt(n);
      var enc = null;
 
      if (c1 < 128) {
         end++;
      } else if((c1 > 127) && (c1 < 2048)) {
         enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
      } else {
         enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
      }
      if (enc != null) {
         if (end > start) {
            utftext += string.substring(start, end);
         }
         utftext += enc;
         start = end = n+1;
      }
   }
 
   if (end > start) {
      utftext += string.substring(start, string.length);
   }
 
   return utftext;
} 


